2016-06-03 3 views
3

I가 다음 코드 조각 :.정규식 내에서 입력 문자열이 포함 + 작동하지 않습니다

$url = "http://www.example.com/url.html"; 
$content=Encode::encode_utf8(get $url); 

$nameaux = Encode::encode_utf8($DBfield); 

if($content =~ />$nameaux<\/a><\/td><td class="class1">(.*?)<\/td>/ || 
    $content =~ />$nameaux<\/a><\/td><td class="class2">(.*?)<\/td>/ || 
    $content =~ />$nameaux<\/a><\/td><td class="class3">(.*?)<\/td>/) { 
    ... more code ... 
} 

이 코드 조각 $DBfield 더하기 (예를 포함하는 문자열과 동일한 경우를 제외하고 잘 작동 + 1) 그것에있는 $content에 존재합니다.

누군가이 문제를 해결하는 방법을 설명 할 수 있습니까?

+0

이 경우'로 다시 포맷 실제 코드, 정규식에 ($ 콘텐츠 = ~ /> $ nameaux <\/a><\/td> (. *?) <\/td>) /' –

+1

'+'인 경우 이전 요소 (문자, 클래스, 그룹 ..)가 한 번 이상 나타나야 함을 의미합니다. '+'자체와 일치 시키려면'\ +'을 사용합니다. – eballes

답변

5

$ nameaux에 +와 같은 정규식 문자가 포함될 수 있으면 \Q ... \E으로 바꿔서 필드를 정규식 리터럴로 이스케이프해야합니다.

$content =~ />\Q$nameaux\E<\/a><\/td><td class="class1">(.*?)<\/td>/ || 

그래서 + 그냥 더하기 기호하고 당신의 정규식이 일치하지 않는 이유는 "하나 이상"을 의미하지 않습니다.

관련 문제