正则表达式仅在恰好出现一个匹配时匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式仅在恰好出现一个匹配时匹配相关的知识,希望对你有一定的参考价值。

我写了这个正则表达式

(<b>)\b[a-zA-Z][a-zA-Z0-9_]{4,15}</b>

但我希望只有在恰好有一次出现时才会触发匹配,所以我认为我需要这样做

((<b>)\b[a-zA-Z][a-zA-Z0-9_]{4,15}</b>){1}

但它似乎没有用。我做错了什么?

答案

尝试使用否定前瞻来断言不会发生第二场比赛:

^(?!.*\b[a-zA-Z][a-zA-Z0-9_]{4,15}\b.*\b[a-zA-Z][a-zA-Z0-9_]{4,15}\b).*\b[a-zA-Z][a-zA-Z0-9_]{4,15}\b.*$

这是一个冗长的正则表达式,很难阅读。假设您希望匹配单词BAT出现一次且仅出现一次的字符串。我们可以写:

^(?!.*\bBAT\b.*\bBAT\b).*\bBAT\b.*$

以上是关于正则表达式仅在恰好出现一个匹配时匹配的主要内容,如果未能解决你的问题,请参考以下文章

Shell 正则表达式

MySQL中的正则表达式

什么正则表达式将匹配文本,不包括 HTML 标记中的内容?

JAVA正则表达式怎么匹配所有符合要求的子字符串

正则表达式初步认识

如何仅在某些行上获得多个 Java 正则表达式匹配