我正在编写一个正则表达式,其中包含一个较大字符串的电话号码,我对某个特定要求有点麻烦。
基本要求是匹配以下电话号码样式 - 带有区号或国际前缀的标准澳大利亚电话号码以及空格和连字符的小余地:
0395551234
03 9555 1234
03-9555-1234
+61395551234
但是,我只想匹配一个数字,如果它在第一个字符之前和最后一个字符之后有一个单词边界,那么以下样式不应该匹配:
0395551234word
03 9555 1234word
03-9555-1234word
+61395551234word
word0395551234
word03 9555 1234
word03-9555-1234
word+61395551234
这是我的正则表达式字符串:
((\+61[ \-]?[2378]|\b0[2378]|\(0[2378]\))[ \-]?[0-9]{4}[ \-]?[0-9]{4}\b)
但它不正确,因为它仍将匹配:
word+61395551234
我无法在\b
字符前使用单词+
,因为+
字符不是单词字符。我还会注意到我正在使用JavaScript,因此如果它位于行的开头或前面有空格字符,我就不能使用正面构造后面的构造来匹配+
字符。如果我可以使用它,这是一个Perl正则表达式,可以达到我的要求:
(((?<=^|\s)\+61[ \-]?[2378]|\b0[2378]|\(0[2378]\))[ \-]?[0-9]{4}[ \-]?[0-9]{4}\b)
我也无法对我正在使用的大字符串进行任何额外处理,因为我需要准确保留其结构,因此在尝试匹配之前不要进行replace()
操作。
答案 0 :(得分:2)
您不能在\b
字符之前使用+
,因为它不被视为单词字符。而是在(?:^|\s)
之前使用:+
,以确保+
位于行开头或空白之后。
使用此正则表达式:
(((?:^|\s)\+61[ -]?[2378]|\b0[2378]|\(0[2378]\))[ -]?[0-9]{4}[ -]?[0-9]{4}\b)