我想正则表达式并在由(?=)(?=)
之类的定界符包围的块内搜索#
在以下示例正则表达式中,我期望的是,cat
至ugly
匹配# cat B
内# cat C
之前的模式。
但是正则表达式不匹配任何东西。
regex
^#(?=[\s\S]*(cat))(?=[\s\S]*(ugly))^#
文本
# cat A
the cat is
very cute.
# cat B
the cat is
very ugly.
# cat C
the cat is
very good.
#
您可以在https://regexr.com/上测试正则表达式
答案 0 :(得分:0)
This RegEx可以通过使用 \ n 限制目标词来帮助您设计/匹配目标词。
MoveType IsHazardous IsReefer IsOOG
-------------------------------------------------- ----------- ----------- ---
DSCR 0 0 0
LOAD 0 0 0
SHFT 0 0 0
简单起见,它为每个目标关键字创建四个组: 和 ugly ,可以使用 $ 3 调用目标关键字和 $ 7 :
如果愿意,您还可以将其绑定到开始 ^ 和结束 $ 。
仅当目标关键字位于两行中间时,此表达式才有效。
答案 1 :(得分:0)
在模式^#(?=[\s\S]*(cat))(?=[\s\S]*(ugly))^#
中,您使用从字符串#
开始匹配^#
,后跟2个正向前行,然后再次匹配^#
。这就是为什么你没有比赛。
要获得更精确的匹配,您可以以^# cat B
如果要使用前瞻,可以在正前瞻中使用2个捕获组。如果您要搜索整个单词中的猫和丑陋,则可以使用单词边界\b
。
(?s)
是一个修饰符,用于使点与换行符匹配,您也可以使用/s
作为标记。
(?s)(?=^# cat B.*?(cat).*?(ugly).*?^# cat C
但是,不使用先行匹配就更容易了:
(?s)^# cat B.*?(cat).*?(ugly).*?^# cat C$