[试图获取仅包含一个连续字母“ l”的文本的所有单词,不区分大小写。
例如:“你好,你看到太阳周围的大光环了吗?”
我尝试了很多组合,但没有一个接近。我想应该使用否定的前瞻,否定的后向捕获或“ \ 1”以前的捕获组,但我从不完全了解如何使用这些,通常避免了这些,并且所有使用这些的尝试都失败了。
您可以使用
(?i)\b(?!\w*?ll)\w*l\w*
/\b(?!\w*?ll)\w*l\w*/i
请参见regex demo
详细信息
(?i)
-不区分大小写的模式开启\b
-单词边界(?!\w*?ll)
-任意0+个“单词”字符后都不允许有ll
:数字,字母,_
s(尽可能少)]\w*l\w*
-0+字字符,再输入0+字字符。您可以使用以下正则表达式(设置了不区分大小写的标志),该正则表达式适用于大多数每个正则表达式引擎。
l
\b[a-k,m-z]*l(?:[a-k,m-z]+l)*[a-k,m-z]*\b
正则表达式引擎执行以下操作。
Demo
使用PCRE(PHP)和其他一些正则表达式引擎,您可以使用子例程调用来减少重复和出错的可能性:
\b # match a word break
[a-k,m-z]* # match 0+ letters other than 'l'
l # match 'l'
(?: # begin non-capture group
[a-k,m-z]+ # match 1+ letters other than 'l'
l # match 'l'
) # end non-capture group
* # execute non-capture group 0+ times
[a-k,m-z]* # match 0+ letters other than 'l'
\b # match a word break
或
\b([a-k,m-z])*l(?:(?1)+l)*(?1)*\b