2010-02-08 2 views
2

내가이 문자열 캡처하는 정규 표현식을 작성하는 것을 시도하고있다 : 문자열을 포함하는 경우는 정규식 패턴에서와 같이정규 표현식은 특정 내용으로 HTML 태그에 맞게

<td style="white-space:nowrap;">###.##</td> 

나는 심지어 그것을 일치하지 않을 수 있습니다 ! preg_match_all()을 사용하고 있지만 올바른 패턴을 찾지 못했습니다. 나는 "white-space:nowrap;"가 어떤 식 으로든 매칭에서 벗어나고 있다고 생각하고 있습니다. 어떤 생각? 감사합니다 ...

+0

@ user268851 코드를 4 줄만 들여 쓰기하면 올바르게 렌더링됩니다. 귀하의 이미지에 대한 링크를 제거하고 귀하의 질문에 HTML을 다시 추가했습니다. –

+4

잘 사용하는 정규식은 무엇입니까? – prodigitalson

+0

정규 표현식으로 HTML을 구문 분석하지 않는 것이 좋습니다. '\ Q ###. ## \ E';) –

답변

1

경고를 보셨습니까? 당신은 그것의 일부 비트, 즉 /을 td 닫기 태그 전에 이스케이프해야합니다. 이것은 저를 위해 작동하는 것을 보였다 :

$string='cow cow cow <td style="white-space:nowrap;">###.##</td> cat cat cat cat'; 
php > preg_match_all('/<td style="white-space:nowrap;">###\.##<\/td>/',$string,$result); 
php > var_dump($result); 
array(1) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(43) "<td style="white-space:nowrap;">###.##</td>" 
    } 
} 
4

DOM 문서를 대신 사용해 보는 것은 어떨까요? 그렇다면 HTML을 적절히 포맷하는 것에 대해 걱정할 필요가 없습니다. Dom Doc 컬렉션을 사용하면 가독성이 향상되고 사용자 공간에 머 무르지 않고 PHP 코어의 부분보다 빠른 성능을 보장합니다.

+1

대신 http://php.net/manual/en/class.domdocument.php를 사용하십시오. – JAL

1

PHP의 preg_ 함수에 대한 정규 표현식 인수를 이중 구분 기호로 사용해야한다는 사실을 알고 있습니까? 예를 들어

preg_match_all(`'/foo/'`, $target, $results) 

'...'

문자열 분리는, /.../ 는 정규식 분리가 있으며, 실제 정규식 foo이다. 정규식 구분 기호는 슬래시가 아니어도 일치해야합니다. 일부 인기있는 선택은 #...#, %...%~...~입니다. 대괄호 문자 쌍 (예 : {...}, (...), [...]<...>)도 사용할 수 있습니다. 그것들은 훨씬 덜 인기가 있으며 좋은 이유가 있습니다.

정규식 구분 기호를 생략하면 정규식 컴파일 단계가 실패하고 오류 메시지가 아마 적합하지 않습니다. 예를 들어,이 코드 :

preg_match_all('<td style="white-space:nowrap;">###.##</td>', $s, $m) 

...이 메시지를 생성하는 것입니다 :

Unknown modifier '#' 

그것은 정규식 구분 기호로 꺾쇠 괄호의 첫 번째 쌍을 사용하려고하고, 어떤이로 > 다음을 regex 수식어 (예 : 대/소문자를 구분하지 않으려면 i, 여러 줄에는 m). 이 문제를 해결하려면, 당신과 같이, 실제 정규식 구분 기호를 추가합니다 :

preg_match_all('%<td style="white-space:nowrap;">###\.##</td>%i', $s, $m) 

구분자의 선택은 개인적인 취향과 편의의 문제이다. # 또는 /을 사용했다면 실제 정규 표현식에서 그 문자를 이스케이프 처리해야합니다. 나는 그것이 정규식 메타 문자이기 때문에 .을 탈출했다.마지막으로, i 수정자를 추가하여 수정 자 사용을 보여 주며 HTML 은 대소 문자를 구분하지 않으므로입니다.