Perl正则表达式,用于匹配出现的冒号(如果存在)

rggaifut  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(147)

我想用正则表达式匹配字符串中的任何字母/数字/下划线字符以及双冒号,如果第一个单词包含“蓝色”。
例如,

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

我试过/Blu\S+\s+(\w+)/,它对除了::之外的所有情况都有效。我如何在检查w+后添加一个匹配,以匹配双冒号,如果存在的话,而不必强制我的正则表达式只匹配::

kxe2p93d

kxe2p93d1#

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

^Blue\b\S*\h+([\w:]+)

中 的 每 一 个
模式 匹配 :

  • ^ 或 使用 \b ( 如果 不在 开始 位置 )
  • Blue\b\S* 匹配 单词 Blue 和 可选 的 非 空格 字符
  • \h+ 匹配 1 个 以上 空格
  • ([\w:]+) 捕获 组 1 中 的 1 + 个 字 字符 或 :

Regex demo 的 最 大 值
或者 使用 \K 清除 匹配 缓冲 区 :

^Blue\b\S*\h+\K[\w:]+

格式
Regex demo 格式
如果 单词 不能 以 冒号 开头 , 但 应该 在 冒号 和 Bluebird 之间 有 :: , 并且 Bluebird 也 应该 匹配 , 如 注解@ikegami 所 示 :

\bBlue\S*\h+\K\w+(?:::\w+)*

格式
Regex demo 格式

相关问题