匹配字符串ruby正则表达式中的确切单词

时间:2014-06-05 22:55:06

标签: ruby regex

我在红宝石中有这个字符串,而我正试图与罪恶进行匹配

"please don't share this: 234-604-142"
"please don't share this: 234-604-1421"

到目前为止我已经

\d{3}-\d{3}-\d{3}

但这也与第二种情况相符。为开始和结束添加^和$将导致它根本不起作用。

要解决此问题,我可以这样做:

x = "please don't share this: 234-604-1421"
x.split.last ~= /^\d{3}-\d{3}-\d{3}$/

但是有没有办法匹配罪呢?

1 个答案:

答案 0 :(得分:3)

值得考虑的另一个选择是

(?<!\d)\d{3}-\d{3}-\d{3}(?!\d)

这样,如果出于任何原因,您的电话号码被跟随或以字母开头,如

"please don't share this number234-604-142because it's private"

正则表达式仍然有用。

解释正则表达式

(?<!                     # look behind to see if there is not:
  \d                     #   digits (0-9)
)                        # end of look-behind
\d{3}                    # digits (0-9) (3 times)
-                        # '-'
\d{3}                    # digits (0-9) (3 times)
-                        # '-'
\d{3}                    # digits (0-9) (3 times)
(?!                      # look ahead to see if there is not:
  \d                     #   digits (0-9)
)                        # end of look-ahead