繁体   English   中英

结合几个正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM