【问题标题】:preg_match() returns 0 although regex testers work [duplicate]preg_match() 返回 0 尽管正则表达式测试器工作 [重复]
【发布时间】:2016-10-20 09:30:00
【问题描述】:

我正在尝试使用 /[\p{L}\s]{6,}/ 验证字符串并尝试仅匹配字符(Unicode 字符也是如此)。我使用regex101 来测试我的正则表达式,它适用于字符串Владимир Алексић。 但是,当我在preg_match() 中使用具有相同字符串的正则表达式时,它总是返回0。但是,如果我避免使用除 A-Za-z 之外的所有字符,它会返回 1。

为什么会这样?

【问题讨论】:

  • preg_match() 如果模式匹配给定的主题,则返回 1,如果不匹配,则返回 0,如果发生错误,则返回 FALSE。
  • @Jonathan 但是模式应该匹配给定的主题并返回 1。我在 regex101 和我的代码中使用了相同的正则表达式,以及相同的字符串,但结果不同。
  • regex101 使用 preg_match 吗?我猜不是
  • @Jonathan 是的,我刚刚看到我的正则表达式不起作用,因为我没有添加 u 模式修饰符,我不知道我必须添加。现在一切顺利,感谢您的帮助!

标签: php regex preg-match


【解决方案1】:

除非设置了u pattern modifier,否则使用 unicode 字符属性的 \p 和其他 escape sequences 不起作用。

/[\p{L}\s]{6,}/u

【讨论】:

  • 我不知道。正则表达式真的是我的弱点。谢谢,成功了。
【解决方案2】:

使用 \p{Cyrillic} 匹配西里尔字符,即:

/[\p{L}\p{Cyrillic}\s]{6,}/u

来源:Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多