Perl正则表达式匹配冒号出现如果存在



我想正则匹配字符串中的任何字母/数字/下划线字符以及双冒号,如果第一个单词包含"Blue"

例如,

Blue Red Yellow //return Red
Blue Red::Orange Yellow //return Red::Orange
Purple Red Yellow //return nothing
Blue R_E_D //return R_E_D 
Red Blue //return nothing 
Blue.ish Yellow //return Yellow

我尝试了/BluS+s+(w+)/,它适用于除::以外的所有情况。我如何在检查w+以匹配双冒号以及如果存在而无需强制我的正则表达式仅匹配如果有::存在后添加匹配。

您可以使用捕获组并重复单词char或:

^BluebS*h+([w:]+)

模式匹配:

  • ^或者如果没有开始使用b
  • BluebS*匹配字Blue和可选的非空白字符
  • h+匹配1+空格
  • ([w:]+)捕获组1中的1+字字符或:

Regex演示

或者使用K清除匹配缓冲区:

^BluebS*h+K[w:]+

Regex演示

如果单词不能以冒号开头,但中间应该有::,Bluebird也应该匹配,如@ikegami:

bBlueS*h+Kw+(?:::w+)*

Regex演示