正则表达式在一个脚本中工作而在另一个脚本中不工作

时间:2009-09-06 21:45:44

标签: php regex

我偶然发现了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键以显示输入字符串。

3 个答案:

答案 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>&#160;aka <em>

我不知道是不是总是这样;您可能希望允许多种类型和表示whitepsace,如下所示:

<br>(?:&(?:#(?:160|xA0)|nbsp);|\xA0|\s)*+aka

,零或多个:NBSP的实体引用(十进制,十六进制或命名);一个真正的 NBSP;或标准的空白字符。