我偶然发现了PHP中一个有趣的错误。基本上我在下面看到一个正则表达式,它可以在一个脚本(脚本A)中正常工作,但在放入类并在脚本中使用时无法工作(脚本B)。
我已经在PHP 5.3和5.2上测试了这个脚本。
脚本A:
http://iamdb.googlecode.com/svn/trunk/testing.php
脚本B:
正则表达式的类用于:http://iamdb.googlecode.com/svn/trunk/imdb/search/imdb_search_title.class.php
脚本调用它:http://iamdb.googlecode.com/svn/trunk/examples/Search_Debug.php
正则表达式:
"#<br> aka <em>\"([^\"]*)\"</em>(?: -?,? ([^ ]*) (?:<em>\(([^\)]*)\)</em>)*)*#i"
感谢。
根据要求,这是脚本B的一些示例输出......
Array
(
[0] => Array
(
)
[1] => Array
(
)
[2] => Array
(
)
[3] => Array
(
)
[INPUT] => <small>(TV series)</small> <br>aka <em>"Hammer Time"</em> - USA <em>(working title)</em>
)
编号键来自preg_match_all调用,之后添加INPUT键以显示输入字符串。
答案 0 :(得分:2)
查看调试器,preg_replace_all
的主题在类和test.php
案例之间不匹配。
从测试用例:
<small>(TV series)</small> <br> aka <em>"Sledge Hammer: The Early Years"</em> - USA <em>(second season title)</em>
从班级调用时的实际主题:
<small>(TV series)</small> <br>aka <em>"Hammer Time"</em> - USA <em>(working title)</em>
<br>
和aka
之间没有空格。把这个空间从正则表达式中取出来就可以了。
答案 1 :(得分:1)
正则表达式或将其嵌入类中没有任何问题。你确信自己的测试情况是相同的,但事实并非如此。在紧急情况下,您发送类版本的字符串
<small>(TV series)</small> <br>aka <em>"Hammer Time"</em> - USA <em>(working title)</em>
与正则表达式不匹配,因为正则表达式只需要<br>
和aka
之间的一个空格。它的修订版有效:
const REGEX_AKA = "#<br>\s*aka <em>\"([^\"]*)\"</em>(?: (?:-?)(?:,?) ([^ ]*) (?:<em>\(([^\)]*)\)</em>)*)*#i";
答案 2 :(得分:0)
您是否尝试与IMDB上的实际搜索结果页面进行匹配,例如this one?在该页面上,"<br>"
和"aka"
始终由实体引用分隔,以表示不间断的空格:
<br> aka <em>
我不知道是不是总是这样;您可能希望允许多种类型和表示whitepsace,如下所示:
<br>(?:&(?:#(?:160|xA0)|nbsp);|\xA0|\s)*+aka
,零或多个:NBSP的实体引用(十进制,十六进制或命名);一个真正的 NBSP;或标准的空白字符。