查找所有PHP短标签

van*_*lch 18 php regex vim

我需要找到所有简短的PHP标签.

它的正则表达式,<\?(?!php)但我不能在vim中使用它.

如何将其"转换"为vim?

Jan*_*abo 28

对我来说,这个工作得很好:

<\?(?!php|xml)
Run Code Online (Sandbox Code Playgroud)

  • Upvoted for copy和pasteable to PHPStorm (7认同)
  • 我使用了 &lt;\?(?!php|xml|=) 所以我可以排除 &lt;?= (3认同)

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)

  • 别忘了有效的<?= <?xml标签!! 更好地使用<\?[^ p = x]和<\?$进行搜索.第二学期会发现<?最后换行... (6认同)
  • +1这个好主意我只是在Eclipse中使用它与<\?[^ p]来恢复一个旧的PHP项目. (2认同)

bis*_*hop 9

使用(最新版本)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.)


Chr*_*oft 6

<\?(\s|\n)

更换

<?php$1

说明匹配短标签,<\?后跟一个空格或换行符(\s|\n)并存储在$1

提供的所有解决方案都匹配该行包含的内容,而不是保证包含的内容。

我们只想匹配short标签,而不关心后面的内容(p / x / =等)。此查找/替换将匹配内联短标签和换行短标签。

注意:如果您使用的是Windows换行符,<\?(\s|\r\n)则将它们匹配。


rip*_*pat 5

您所追求的正确的预测模式<?\(php\)\@!将匹配除了后面的所有短标签php

有关前瞻/后方断言的更多详细信息,请输入:help \@vim