正则表达式查找不含双“ L”的单词

问题描述 投票:2回答:2

[试图获取仅包含一个连续字母“ l”的文本的所有单词,不区分大小写。

例如:“你好,你看到太阳周围的大光环了吗?”

  • 大->已捕获
  • 光环->已捕获

我尝试了很多组合,但没有一个接近。我想应该使用否定的前瞻,否定的后向捕获或“ \ 1”以前的捕获组,但我从不完全了解如何使用这些,通常避免了这些,并且所有使用这些的尝试都失败了。

regex
2个回答
4
投票

您可以使用

(?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+字字符。

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
© www.soinside.com 2019 - 2024. All rights reserved.