Jan*_*abo 28
对我来说,这个工作得很好:
<\?(?!php|xml)
Run Code Online (Sandbox Code Playgroud)
mea*_*gar 16
找短标签VIM,最好的办法是找到所有出现的<?
没有跟随p
:
/<?[^p]
Run Code Online (Sandbox Code Playgroud)
你的正则表达式在vim中失败的原因是因为/?
找到了文字问号,\?
而是量词; /<\?
在vim中将尝试找到0或1个小于号的符号.这与您在大多数正则表达式引擎中的预期相反.
如果你想匹配紧跟一个新行的短标签,你就不能使用[^p]
,这需要有一些匹配的东西不是一个p
.在这种情况下,您可以匹配"not p or end-of-line"
/<?\($\|[^p]\)
Run Code Online (Sandbox Code Playgroud)
使用(最新版本)grep
:
grep -P '<\?(?!(php|xml|=))' *
Run Code Online (Sandbox Code Playgroud)
要查找具有<?
短标记的所有文件:
find -type f -exec grep -IlP '<\?(?!(php|xml|=))' {} +
Run Code Online (Sandbox Code Playgroud)
请注意,这些与<?=
短标记不匹配,因为自5.4.0以来始终可用,并且无论如何都不会造成任何伤害.(如果<?
有伤害的话allow_short_tags = Off
.)
<\?(\s|\n)
<?php$1
说明匹配短标签,<\?
后跟一个空格或换行符(\s|\n)
并存储在$1
提供的所有解决方案都匹配该行不包含的内容,而不是保证包含的内容。
我们只想匹配short标签,而不关心后面的内容(p / x / =等)。此查找/替换将匹配内联短标签和换行短标签。
注意:如果您使用的是Windows换行符,<\?(\s|\r\n)
则将它们匹配。