【问题标题】:Why This Regex Matches With That Input (PCRE)?为什么此正则表达式与该输入 (PCRE) 匹配?
【发布时间】:2017-02-10 00:44:04
【问题描述】:

我不明白为什么会出现这种模式

^[A-Za-z0-9\.,-\?]+$

将匹配如下输入:

should-match
should-match-2.no.problem.cool.with.me.
however:this->should;not;match=yet=it=does.

毕竟> : ; = 不包含在模式中。

Debuggex Demo

【问题讨论】:

  • 没有进一步研究 - 你的角色类中有一个可疑的未转义减号。
  • @SebastianProske 你是对的!
  • 转义-,这样你就有^[A-Za-z0-9\.,\-\?]+$,你不需要在一个字符类中转义?.,所以现在你有^[A-Za-z0-9.,\-?]+$
  • 您也可以将连字符紧跟在范围之后:^[A-Za-z0-9-.,?]+$

标签: regex pcre


【解决方案1】:

是的,他们是。当您在 [] 模式中使用 - 时,您的意思是从左侧的字符到右侧的字符。所以,-?实际上是指从ascii字符,到ascii字符?,包括中间的所有字符。这包括您发布的内容。

您可以将- 放在[] 组的末尾,然后它代表自己,而不是一系列字符,或者您可以通过在其前面添加\ 字符来转义它,如\-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2021-07-10
    • 2022-01-04
    相关资源
    最近更新 更多