如果找到多个匹配,则正则表达式失败

采取以下正则表达式:

P[0-9]{6}(\s|\.|,)

这是为了检查一个字符串中以“P”开头的6位数字 – 大部分工作正常.

问题是,如果发现多个匹配,我们需要失败 – 这可能吗?

即,使以下屏幕截图中的文本4失败,但仍然保持所有其他人失败/通过,如下所示:

(此RegEx正在sql .net CLR中执行)

解决方法

如果此工具使用的正则表达式引擎确实是.NET引擎,那么您可以使用

^(?:(?!P[0-9]{6}[\s.,]).)*P[0-9]{6}[\s.,](?:(?!P[0-9]{6}[\s.,]).)*$

如果它是本机sql引擎,那么您无法使用单个正则表达式匹配,因为这些引擎不支持环绕声断言.

说明:

^                         # Start of string
(?:                       # Start of group which matches...
 (?!P[0-9]{6}[\s.,])      # unless it's the start of Pnnnnnn...
 .                        # any character
)*                        # any number of times
P[0-9]{6}[\s.,]           # Now match Pnnnnnn exactly once
(?:(?!P[0-9]{6}[\s.,]).)* # Match anything but Pnnnnnn
$                        # until the end of the string

测试它live on regex101.com.

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...