【问题标题】:PRCE regular expression to exclude a particular character?PCRE正则表达式排除特定字符?
【发布时间】:2014-04-07 18:44:04
【问题描述】:

我正在寻找一个可以匹配任何不包含反斜杠的正则表达式。我一直在http://regex101.com/#PCRE 上尝试正则表达式,但谷歌也没有真正提供帮助。

我想匹配任何在路径中看起来只有一个斜杠的 URL 字符串:

/path/page
/path/anypage

并且不匹配任何带有更多斜杠的 URL:

/path/morepath/page
/path/morepath/andmorepath/page

到目前为止,我的正则表达式看起来像 \/path\/[a-z]+,但它也很高兴匹配带有更多斜杠的 URL。

如何排除这些网址?

【问题讨论】:

  • 您忘记转义第二个正斜杠,它充当结束分隔符:\/path\/[a-z]+。或者(取决于语言),您可以使用不同的分隔符,例如 #~ (#/path/[a-z]+#)。
  • @Sam - 谢谢,已编辑,但问题还是一样!
  • 查看@Jerry 的回答 :)

标签: regex pcre


【解决方案1】:

带有否定的前瞻,或带有否定的类。

否定类:

^/path/[^/]*$

demo

否定类将匹配除内部内容之外的所有内容,在这种情况下,正斜杠和末尾的锚点 $ 确保字符串一直被测试到末尾。

负前瞻:

^/path/(?!.*/)

demo

如果里面的内容匹配,否定的前瞻将使整个匹配失败。因此,如果.*/ 在否定前瞻点匹配,则匹配将失败。

注意:我通常使用我的正则表达式中没有出现的字符的分隔符。在这种情况下,我将分隔符从 / 更改为 ~

【讨论】:

  • 请注意,根据分隔符,/ 可能需要转义。
  • 太棒了,谢谢!我想出了否定类,但没有意识到我必须将$ 放在末尾以确保整个字符串都经过测试。再次感谢您提供非常有帮助的答案。
  • @Richard 我的荣幸 :)
【解决方案2】:

这应该有效:

^(?:\/\w+){2}$

在这里演示:http://regex101.com/r/gM4nG9

【讨论】:

  • 我喜欢这种方法。
猜你喜欢
  • 2020-04-12
  • 2014-11-07
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 2016-07-03
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多