【问题标题】:Using regex in PHP在 PHP 中使用正则表达式
【发布时间】:2009-11-24 15:46:13
【问题描述】:

我试过了:

$mtcDatum = preg_match("/[0-9]{2}/[0-9]{2}/[0-9]{4}/", $lnURL);

这会返回一条错误消息:

警告:preg_match() [function.preg-match]: Unknown modifier '['

为什么这不起作用?我习惯了 Linux 做正则表达式的方式,PHP 对正则表达式的处理方式不同吗?

【问题讨论】:

  • 嘿,是的,所以根据 davearchie 和 Ben James 的回答,您的正则表达式的第十个字符当前是您的正则表达式的结尾,并且该函数不知道如何处理剩余的一堆字符。

标签: php regex


【解决方案1】:

PHP 语法将“/”字符解释为模式的结尾。您需要转义正斜杠:

preg_match("/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/", $lnURL);

【讨论】:

    【解决方案2】:

    您的模式周围需要一个分隔符(这是将模式与任何修饰符分开的地方)。通常使用/,但由于这是您尝试匹配的字符串的一部分,您可以使用另一个字符,例如#

    $mtcDatum = preg_match("#[0-9]{2}/[0-9]{2}/[0-9]{4}#", $lnURL);
    

    【讨论】:

    • 不应该是"#[0-9]{2}/[0-9]{2}/[0-9]{4}#"
    • 如果我转义正斜杠"/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/"
    • 完全正确。请注意,另一种方法是添加斜杠作为分隔符,然后转义模式中的所有斜杠。这不是很可读,这就是他建议选择备用分隔符的原因。
    • 但在添加新的分隔符#之前,他似乎忘记从OP的正则表达式中删除/
    • 我已编辑此内容并删除了前导和尾随 /。我不确定这些是否应该是模式的一部分,或者是分隔符
    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 2020-09-14
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多