我正在尝试创建正则表达式以与 grep 一起使用来查找具有 html 元素作为值的 php variabe 行,但我遇到了问题。
我设法做到了:
.*(\$)*(\=)*(\<).*\n?
它应该匹配包含 $、= 和 < 字符的行。
例如:
$var = "<h1>test</h1>";
我正在使用的 Grep 命令:
grep -Pro ".*(\$)*(\=)*(\<).*\n?"
由于某种原因,它似乎也匹配这样的行:
echo "</td> \n";
答案1
和*
后面的 s一如既往地表示零或多个。(\$)
(\=)
表示.*\n?
零个或多个任意字符(可选)(由于?
,表示零个或一个),后跟\n
。
这意味着.*(\$)*(\=)*(\<).*\n?
将匹配任何行,(\<)
无论其前面是否有转义$
和/或 an =
。
在英语中,该正则表达式读作“零个或多个字符,后面可选跟一个$
,然后可能是一个=
,然后是一个<
(不是可选的),然后是零个或多个字符,后面可选跟一个换行符”。
换句话说,整个正则表达式(忽略捕获)相当于<
.这是正则表达式中唯一的东西不是选修的。
顺便说一句,如果你的意思是一个或多个,请使用+
代替。*
您可能想尝试更多类似的事情:
grep -P '\$var\s*=\s*['"].*<[^>]+>'
匹配$var
后跟零个或多个空白字符,然后是一个=
,然后再次是零个或多个空白,后跟一个'
或一个"
,然后是零个或多个任意字符,然后是<
任意字符除了a >
,最后是 a >
。
例如$var='....<h1>'
会匹配。
注意,这不会捕获'var=' 和任何 html 之间有换行符的地方。$var='htmlcode'