如何使用Regex查找我是否在多个不同位置使用了相同的字符?

时间:2017-05-12 20:58:08

标签: regex

所以我正在查看具有不同分隔符的不同数字,并且我想查找具有相同分隔符的所有数字。

基本上,我想要以下

123+456+7890 // MATCH
123-456-7890 // MATCH
123.456.7890 // MATCH
123+456-7890 // FAILURE

我目前使用的正则表达式是

\d{3}[+-.]\d{3}[+-.]\d{4}

但是,它会匹配具有不同分隔符的数字序列。我不想在这样的事情上使用一个巨大的OR,因为现实生活相当于有更多的角色可以适合那里。

有没有办法在多个位置匹配相同的字符?

2 个答案:

答案 0 :(得分:6)

您可以使用捕获的组和反向引用来确保再次使用相同的分隔符。

^\d{3}([+.-])\d{3}\1\d{4}$
  • ([+.-])这里我们捕获组#1中的分隔符
  • \1这里我们使用相同分隔符的反向引用

RegEx Demo

答案 1 :(得分:4)

您可以使用这样的反向引用:

\d{3}([+.-])\d{3}\1\d{4}
  • 匹配[+-.]的第一个运算符保留在捕获组中,以便稍后引用。
  • \1是对第一个捕获组的反向引用,在这种情况下为[+-.],因此它将确保运算符与前一个相同。

Regex 101 Demo

您可以阅读有关反向引用的更多信息here