【问题标题】:Regex expression not working with once or none正则表达式不能使用一次或没有
【发布时间】:2016-01-13 11:40:26
【问题描述】:

下面是我的正则表达式:

[^4\d{3}-?\d{4}-?\d{4}-?\d{4}$]

但它会在- 处引发错误。我正在使用?,它应该允许- 出现零次或一次。为什么会报错?

【问题讨论】:

  • 什么意思?如果输入是-there is no match。它可以工作with those examples。您在哪里/如何使用该正则表达式?
  • 你想达到什么目的?
  • 我希望连字符出现一次或不出现。
  • 你想在你的正则表达式中包含括号吗?括号是转义字符,因为它们用于字符范围。使用\[\] 将其转义。
  • 这个问题的问题在于错误是如此明显以至于我们拒绝看到它。方括号不能用于分组。

标签: regex regex-lookarounds


【解决方案1】:

正则表达式的问题在于模式包含在[] 中,它们被视为字符类标记(请参阅Character Classes or Character Sets):

使用“字符类”,也称为“字符集”,您可以告诉正则表达式引擎只匹配几个字符中的一个。只需将要匹配的字符放在方括号之间。如果要匹配ae,请使用[ae]

在字符类中,- 在文字字符之间创建范围。在您的情况下,这些范围无效(从具有较高值的​​字符到具有较低值的字符),因为 {4} 和其他子模式被视为单独的字符,而不是特殊构造:

所以,您需要做的就是删除两边的[]

^4\d{3}-?\d{4}-?\d{4}-?\d{4}$

regex demo

【讨论】:

  • 是的。我懂了。谢谢:)
  • 确实,OP 可能想在发布另一个问题之前检查regex tag wiki
  • @tripleee:是的,我希望有这样的过滤器。也许正则表达式相关的问题应该只从正则表达式标签维基页面发布:)?
【解决方案2】:

尝试使用\ 转义- 并删除[]

^4\d{3}\-?\d{4}\-?\d{4}\-?\d{4}$

【讨论】:

  • 我非常怀疑这就是 OP 所需要的。转义连字符将删除错误,但不会更正表达式本身。
  • @stribizhev 但是 OP 没有说他想用这个正则表达式匹配什么。
  • 那么,your 正则表达式应该匹配什么?
  • @stribizhev 我不知道。我刚刚删除了错误。
  • 量词或类不能在字符集中使用,因为一个字符集一次匹配一个字符,这会破坏整个正则表达式。删除括号应该可以解决这个问题。
猜你喜欢
  • 2014-12-15
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2012-12-02
  • 2012-01-28
相关资源
最近更新 更多