【问题标题】:Regex pattern causing syntax error when pasted into preg_match_all()粘贴到 preg_match_all() 时导致语法错误的正则表达式模式
【发布时间】:2011-01-31 22:13:38
【问题描述】:

我使用在线正则表达式测试器http://gskinner.com/RegExr/ 提出了以下模式:(我已经粘贴了所有三行,因为我不确定是否应该粘贴正则表达式或模式。)

RegExp: /<div class="label">.*?<h3>(.*?)</h3>.*?"more">(.*?)\|/g
pattern: <div class="label">.*?<h3>(.*?)</h3>.*?"more">(.*?)\|
flags: g

如果我像这样在 php 中使用它:

$pattern = '/<div class="label">.*?<h3>(.*?)</h3>.*?"more">(.*?)\|/g';

preg_match_all($pattern,$page,$matches );

我收到一个错误:

警告:preg_match_all() [function.preg-match-all]:未知 修饰符“。”在...

谁能解释我如何从这个工具中得到我的正则表达式,转换成正确的格式,以便在 PHP 中使用。非常感谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您没有转义 &lt;/h3&gt;g 中的斜杠意味着全局应用,这里不需要,因为您使用的是 preg_match_all,它在 PHP 的正则表达式实现中不是有效的 modifier,只是省略它

    试试这个:

    $pattern = '/<div class="label">.*?<h3>(.*?)<\/h3>.*?"more">(.*?)\|/';
    

    【讨论】:

    • 一种常见的替代方法是使用一些不常见的字符,如# 作为正则表达式分隔符,例如#r?eg*ex#i - 这通常有助于避免无关的转义。
    • 天哪,速度太快了!但是使用您的模式,我得到:警告:preg_match_all() [function.preg-match-all]: Unknown modifier 'g' in...
    • @Pickledegg: 嗯,g 表示全局应用,这里不需要,因为您使用的是preg_match_all,而且它不是 PHP 中的有效修饰符,只需省略它(答案编辑为反映变化)。
    • 三个简单的字:BEST。论坛。曾经。感谢一百万人的力量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多