[英]Combining several regular expressions
所以我在查找不同类型的电话号码时遇到了问题:
他们可以采用以下格式:
+xx xx xxxxxxxx - /[+][0-9]{2}\s[0-9]{2}[0-9]{8}/
xxxx xxxxxx - /[0-9]{4}\s[0-9]{6}/
xxxxx xxxxxx - /[0-9]{5}\s[0-9]{6}/
xxxxxxxxxxx - /[0-9]{11}
+xx xxxxxxxxxx - / [+][0-9]{2}\s[0-9]{10}
xxxx xxxxxxxxxx - /[0-9]{4} \s0-9]{10}/
我为每个表达式编写了正则表达式,但不确定如何将其组合为一个大表达式以查找所有表达式。
我如何将其组合成一个大表达式,以便在处理数字文件时可以找到所有这些数字格式。
如果只需要一个捕获所有这些情况的正则表达式,则可以将提供的情况“或”在一起:
(?:[+][0-9]{2}\\s[0-9]{2}[0-9]{8})|(?:[0-9]{4}\\s[0-9]{6})|(?:[0-9]{5}\\s[0-9]{6})|(?:[0-9]{11})|(?:[+][0-9]{2}\\s[0-9]{10})|(?:[0-9]{4} \\s0-9]{10})
我刚刚结束在非捕获组每个正则表达式(?:)
和线或|
他们在一起。
但是,这与分别遍历并检查每个正则表达式没有什么不同,并且维护性要差得多。 我会逐一检查案件。
由于您的格式实际上只是文本字符串,
+xx xx xxxxxxxx
xxxx xxxxxx
xxxxx xxxxxx
xxxxxxxxxxx
+xx xxxxxxxxxx
xxxx xxxxxxxxxx
如果通过此工具运行格式
它会给你这样的正则表达式
\+xx [ ] xx
(?: [ ] )?
xxxxxxxx
| xxxx
(?:
[ ] xxxxxx
(?: xxxx )?
| x
(?: [ ] )?
xxxxxx
)
您只需将[ ]
替换为\\s{1,9}
,将x
替换为\\d
给你最后的正则表达式
\\+\\d{2}\\s{1,9}\\d{2}(?:\\s{1,9})?\\d{8}|\\d{4}(?:\\s{1,9}\\d{6}(?:\\d{4})?|\\d(?:\\s{1,9})?\\d{6})
https://regex101.com/r/nF2L9T/1
\+ \d{2} \s{1,9} \d{2}
(?: \s{1,9} )?
\d{8}
|
\d{4}
(?:
\s{1,9} \d{6}
(?: \d{4} )?
| \d
(?: \s{1,9} )?
\d{6}
)
由于这是一个完整的三元树,因此它可能比普通三倍要快
一堆交替。
Regex1: \+\d{2}\s{1,9}\d{2}(?:\s{1,9})?\d{8}|\d{4}(?:\s{1,9}\d{6}(?:\d{4})?|\d(?:\s{1,9})?\d{6})
Options: < none >
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 6
Elapsed Time: 0.72 s, 715.33 ms, 715325 µs
Matches per sec: 419,389
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.