BBCode와 같은 html 파서를 만들려고합니다. 나는 다음과 같은 형식으로 HTML 텍스트에서 항목을 구문 분석 할 예를 들어 : .....html..... [I]Item1[/I].....html....[I]Item2[/I]......
그래서 나는 [I]XXXXX[/I]
가 나는 또한 정규식 str_replace
을 방지하기 위해 전용 항목 1을 반환하려면 얻을 수있는 정규 표현식을 사용하고 . 현재 str_replace [I]
을 ""
및 [/I]
과 ""
으로 사용하여 Item1을 얻습니다. 문제는 정규식이 항상 작동하지 않는다는 것입니다.정규 표현식의 PHP 하위 문자열이 일치하고 정규 표현식이 항상 작동하지 않는 경우
$pattern="/\[I]([^\[].)+\[\/I]/m";
preg_match_all($pattern,$string,$out,PREG_SET_ORDER);
foreach($out as $i)
{
$temp=$i[0];
echo "Found!";
$i[0]=str_replace("[I]","",$i[0]);
$i[0]=str_replace("[/I]","",$i[0]);
......
}
내 정규 표현식의 의미 :
나는 울부 짖는 코드를 사용하고 [I]
이 ([I] [I] [/I] [/I]
을 방지하기 위해) [
를 제외한 모든 문자와 계속 [/I]
로 끝과 시작합니다. aaaaa
과 같은 일부 문자열이 있고 aaa aa
같은 문자열이 있습니다. 어쩌면 그런 HTML 파서를 만드는 더 좋은 방법이 있을까요?
감사합니다.
편집 : 좋아, 해결책을 찾았지만 왜 이것이 작동하지 않는지 이해할 수 없습니다! 해결책은 $pattern='#\[i\](.*?)\[/i\]#is'
이었지만 그 차이점은 무엇입니까?
편집 2 : 레이더가 주 문제가 정확했습니다. ([^\[.)+]
입니다. 그러면 언어 [I](a)^2n[/I]
이 생성되어 [I]aa[/I]
과 일치하지만 [I]aaaaa[/I]
은 일치하지 않습니다!
흠 ... 당신이 올바른지 내가 실수로 lanquage [I] (AA)^창조 N [/ I]! – nikosdi