Regex 带通配符搜索的正则表达式?
我创建了一个正则表达式来检查字符串是否存在以下情况:Regex 带通配符搜索的正则表达式?,regex,Regex,我创建了一个正则表达式来检查字符串是否存在以下情况: 前4个字符是数字 紧跟着一点 后面跟着3个数字 紧跟着一点 后跟4到8个数字或字母 ie:1234.123.125B 我的正则表达式:^[0-9]{4}[.][0-9]{3}[.][0-9a-zA-Z]{4,8}$ 但是现在我需要一个通配符搜索:如果前8个字符后面有一个“*”,正则表达式也应该匹配。例如: 1234.123.12* MATCH 1234.123* MATCH 1234.123.45B9* MATCH 1234
- 前4个字符是数字
- 紧跟着一点
- 后面跟着3个数字
- 紧跟着一点
- 后跟4到8个数字或字母
1234.123.125B
我的正则表达式:^[0-9]{4}[.][0-9]{3}[.][0-9a-zA-Z]{4,8}$
但是现在我需要一个通配符搜索:如果前8个字符后面有一个“*”,正则表达式也应该匹配。例如:
1234.123.12* MATCH
1234.123* MATCH
1234.123.45B9* MATCH
1234.12* NO MATCH
1234.12345* NO MATCH
如何将通配符搜索添加到正则表达式?
谢谢您可以交替使用此正则表达式:
^\d{4}\.\d{3}(?:\*|\.[\da-zA-Z]{0,7}\*|\.[\da-zA-Z]{4,8})$
正则表达式详细信息:
:开始^
:匹配4位+1点+3位\d{4}\.\d{3}
:在一个点之后匹配一个(?:\*\.[\da-zA-Z]{0,7}\*.[\da-zA-Z]{4,8})
或一个*
和0到7个数字/字母,或匹配4到8个数字/字母*
:结束$
^\d{4}\.\d{3}(?:\*|\.[\da-zA-Z]{0,7}\*|\.[\da-zA-Z]{4,8})$
正则表达式详细信息:
:开始^
:匹配4位+1点+3位\d{4}\.\d{3}
:在一个点之后匹配一个(?:\*\.[\da-zA-Z]{0,7}\*.[\da-zA-Z]{4,8})
或一个*
和0到7个数字/字母,或匹配4到8个数字/字母*
:结束$
- 您不允许通配符是中间字符串
- 您也不希望在完整模式后使用通配符(例如:
)1234.123.12345678*
- 我的假设是:
^\d{4}\.\d{3}(?!.*\*.)(?![^*]{0,4}$)[.*][*\da-zA-Z]{0,8}$
请参阅联机
-开始字符串ancor^
-四位数字、一个点和另外三位数字\d{4}\.\d{3}
-零个或多个字符后跟星号和除换行符以外的其他字符的负前瞻(?!.\*)
-对0到4个字符(字符串ancor前的星号除外)进行负前瞻(?![^*]{0,4}$)
-文字点或星号[.*]
-字符类中的0到8个字符[*\da-zA-Z]{0,8}
-结束字符串ancor$
- 您不允许通配符是中间字符串
- 您也不希望在完整模式后使用通配符(例如:
)1234.123.12345678*
- 我的假设是:
^\d{4}\.\d{3}(?!.*\*.)(?![^*]{0,4}$)[.*][*\da-zA-Z]{0,8}$
请参阅联机
-开始字符串ancor^
-四位数字、一个点和另外三位数字\d{4}\.\d{3}
-零个或多个字符后跟星号和除换行符以外的其他字符的负前瞻(?!.\*)
-对0到4个字符(字符串ancor前的星号除外)进行负前瞻(?![^*]{0,4}$)
-文字点或星号[.*]
-字符类中的0到8个字符[*\da-zA-Z]{0,8}
-结束字符串ancor$
+
可能应该是{1,7}
或者{1,8}
。但这要由OP来决定。目前的模式将匹配1234.123.123456789*
。我知道。我只是为OP指出这一点,因为这是他们可能忽略的东西(因为它满足了他们当前的所有示例)。答案不错:)这个+
应该是{1,7}
或者{1,8}
。但这要由OP来决定。目前的模式将匹配1234.123.123456789*
。我知道。我只是为OP指出这一点,因为这是他们可能忽略的东西(因为它满足了他们当前的所有示例)。很好的回答:)这是否意味着在完整模式后允许使用通配符?例如,1234.123.12345678*
是否应该是有效的匹配项?这是否意味着在完整模式后允许使用通配符?例如,1234.123.12345678*
是否应该是有效的匹配项?它实际上不需要两个负外观头。它使正则表达式的执行速度比没有任何前瞻性的正则表达式慢2倍。是的,在我的机器上,在1400个样本字符串上批量处理这个过程似乎要快11%(你的正则表达式),所以是的,在这方面你很荣幸=)。我想,步数并不总是等于速度。在regex101上,177步与350步(验证你自己)=>绝对不是11%:)@anubhava,我的模式还有一个问题(我现在已经解决了)。虽然两倍的步骤似乎并不意味着两倍的速度慢(因此处理时间减少了11%),但您肯定让我相信,没有前瞻更快。我建议OP重新考虑接受你的答案!它实际上不需要两个负面的头像。它使正则表达式的执行速度比没有任何前瞻性的正则表达式慢2倍。是的,在我的机器上,在1400个样本字符串上批量处理这个过程似乎要快11%(你的正则表达式),所以是的,在这方面你很荣幸=)。我想,步数并不总是等于速度。在regex101上,177步与350步(验证你自己)=>绝对不是11%:)@anubhava,我的模式还有一个问题(我现在已经解决了)。虽然两倍的步骤似乎并不意味着两倍的速度慢(因此处理时间减少了11%),但您肯定让我相信,没有前瞻更快。我建议OP重新考虑接受你的答案!