正则表达式并在内部用分界符括起来的块中搜索

时间:2019-04-25 06:18:35

标签: regex pcre

我想正则表达式并在由(?=)(?=)之类的定界符包围的块内搜索#

在以下示例正则表达式中,我期望的是,catugly匹配# 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/上测试正则表达式

2 个答案:

答案 0 :(得分:0)

This RegEx可以通过使用 \ n 限制目标词来帮助您设计/匹配目标词。

MoveType                                        IsHazardous IsReefer    IsOOG
-------------------------------------------------- ----------- ----------- ---
DSCR                                               0           0           0
LOAD                                               0           0           0
SHFT                                               0           0           0

简单起见,它为每个目标关键字创建四个组: ugly ,可以使用 $ 3 调用目标关键字和 $ 7

enter image description here

如果愿意,您还可以将其绑定到开始 ^ 和结束 $

  

仅当目标关键字位于两行中间时,此表达式才有效。

答案 1 :(得分:0)

在模式^#(?=[\s\S]*(cat))(?=[\s\S]*(ugly))^#中,您使用从字符串#开始匹配^#,后跟2个正向前行,然后再次匹配^#。这就是为什么你没有比赛。

要获得更精确的匹配,您可以以^# cat B

开头

如果要使用前瞻,可以在正前瞻中使用2个捕获组。如果您要搜索整个单词中的猫和丑陋,则可以使用单词边界\b

(?s)是一个修饰符,用于使点与换行符匹配,您也可以使用/s作为标记。

(?s)(?=^# cat B.*?(cat).*?(ugly).*?^# cat C

Regex demo

但是,不使用先行匹配就更容易了:

(?s)^# cat B.*?(cat).*?(ugly).*?^# cat C$

Php demo

相关问题