我正在寻找正好有12或13位数的电话号码。
以下两个正则表达式工作:
PS C:\Data\UMCP> $bla = [regex]'^(\+[3][9])?([0-9]\d{9})$'
PS C:\Data\UMCP> $twelv -match $bla
True
PS C:\Data\UMCP> $bla = [regex]'^(\+[3][9])?([0-9]\d{10})$'
PS C:\Data\UMCP> $thirt -match $bla
True
但是
PS C:\Data\UMCP> $bla = [regex]'^(\+[3][9])?([0-9]\d{9} | ^\+[3][9])?([0-9]\d{10})$'
PS C:\Data\UMCP> $thirt -match $bla
True
PS C:\Data\UMCP> $twelv -match $bla
False
我应该如何使用|
或?
答案 0 :(得分:1)
你在管道周围有空格,这个空白很重要。要制作一些空格(例如,像这样的“格式化空格”),请将(?x)
IgnorePatternWhitespace
内联修饰符添加到模式的开头。
另外,你应该小心使用未转义的括号,他们组成小组并且必须配对。
您的固定模式可能看起来像
'^(?:(?:\+[3][9])?[0-9]\d{9}|(?:\+[3][9])?[0-9]\d{10})$'
| |--OPT.GR.-| | |-OPT.GR.--| |
|---------- BRANCH 1------|-------- BRANCH 2-------|
查看组的创建方式:外部括号创建一个组,以便^
和$
可以应用于两个备用分支,内部括号用于形成一个可选组(使用他们之后的?
量词。)
如果您有匹配此模式的字符串:
+39
开头使用
^(?:\+39)?[0-9]{10,11}$
请参阅regex demo