점을 사용하는 것은 끔찍한 연습이므로이 작업을 수행하고 있습니다. 정규 표현식에서 잘못된 것을하고있는 공짜는 단선 옵션을 사용할 때입니다. 이는 엄청난 자원 낭비이며 어느 시점에 깨뜨릴 수밖에 없습니다. 당신이 경우 합법적 인 문자로 <을 기대하거나 굵은 글씨처럼보다 적게보다는 또는 형식 태그를 의미합니다 (어떤 이유로),
$street_address_regex = '~14px;">([^<]*)~i';
을 또는 :
이 사용할 필요 99.9 % 긍정적이다
$street_address_regex = '~14px;">([^<]*<)*?\/span~i';
을 그리고 그것은 당신이 당신의 문자열에 얻을 것이다 마지막 <
문자를 포맷해야하고 싶지 않은만큼 당신을 귀찮게하는 경우, 당신은이 작업을 수행 할 수 있습니다 또는 기울임 꼴, 당신은이 작업을 수행 할 수 있습니다
$street_address_regex = '~14px;">((?:[^<]*(?(?!<\/span)<))*)~i';
.
시험이 With This Tester
.
하지만 솔직히 Regex를 사용해서는 안됩니다. 그런 다음 stripos에게 </span>
입력의을 찾을 수 ... stripos에게 <span style="font-size:14px;">
의을 찾아 (포인트 시작 주소를 얻기 위해) 길이를 추가 이전 인덱스 (주소는 포인트를 종료 얻을) 발견의 점을 상쇄 . 그들을 빼서 길이를 얻으십시오. 그런 다음 OriginalString, StartIndex 및 Length를 사용하여 하위 문자열을 가져옵니다.
소리가 많이 들리지만 Regex 대신 작은 함수를 사용하고 OriginalString, StartString 및 EndString을 입력하면 방금 전에 설명한 방법으로 StartString과 EndString 사이의 내용을 반환합니다. 기능을 재사용 가능하게 만드십시오.
해당 기능을 사용하면 코드 부분이 이되며은 10 배 이상 빠릅니다. 정규식은 패턴에 대한 지옥만큼 강력하지만 패턴이 없으며 두 정규식 문자열 사이에 내용을 넣을 문자열이 있습니다. Regex 정적 문자열 조작에 대한 지옥 같은 느린 ...특히 쉬버 ~
$Input = '<span style="font-size:14px;">736 E 17th St</span><br />';
echo GetBetween($Input, '14px;">', '</span');
function GetBetween($OrigStr, $StartStr, $EndStr) {
$StartPos = stripos($OrigStr, $StartStr) + strlen($StartStr);
$EndPos = stripos($OrigStr, $EndStr, $StartPos);
return substr($OrigStr, $StartPos, $EndPos - $StartPos);
}
이 정규식에's' 수정 추가 ~ 단일 라인으로 도트를 사용. –
감사합니다. Niet - 이제 수정 자에 대해 읽어 보겠습니다. 업데이트 : 감사합니다. 나는 가까이서 기다리고 있었다. –
@Whoshooter 그렇게 많이 벗어나지 않아도됩니다 ~ ~ 14px; "> (. *?)
~ s' – HamZa