查找所有PHP短标签

时间:2011-05-24 13:09:22

标签: php regex vim

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

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

如何将其“转换”为vim?

8 个答案:

答案 0 :(得分:25)

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

<\?(?!php|xml)

答案 1 :(得分:16)

在vim中查找短标签的最佳方法是查找<?后面没有p的所有匹配项:

/<?[^p]

你的正则表达式在vim中失败的原因是因为/?找到了文字问号,而\?是量词; vim中的/<\?将尝试找到0或1个小于号的符号。这与您在大多数正则表达式引擎中的预期相反。


如果您想匹配紧跟一个新行的短标记,则无法使用[^p],这需要某些来匹配哪个不是{ {1}}。在这种情况下,您可以将“not p or end-of-line”与

匹配
p

答案 2 :(得分:7)

使用(最新版本)grep

grep -P '<\?(?!(php|xml|=))' *

要查找<?短标记的所有文件:

find -type f -exec grep -IlP '<\?(?!(php|xml|=))' {} +

请注意,这些与<?=短标记不匹配,因为自5.4.0以来它是always available并且无论如何都不会造成任何伤害。 (如果<?allow_short_tags = Off会造成伤害。)

答案 3 :(得分:5)

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

有关前瞻/后方断言的更多详细信息,只需在vim

中键入:help \@即可

答案 4 :(得分:4)

查找

<\?(\s|\n)

替换

<?php$1

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

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

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

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

答案 5 :(得分:2)

略微修改上面的答案......

/<?[^p\n]

上面的答案与一个开头的短标签不匹配,后面跟着我正在看的一些代码中隐藏的换行符,这个代码确实......

答案 6 :(得分:1)

要匹配<?而不是<?php,请将其用作vim中的搜索字词:

/<?[^p]

/以cmd-mode

开始搜索

答案 7 :(得分:1)

我想通过查找和替换将所有<?代码替换为PhpStorm中的<?php

对我来说,这是

查找

<\?[^p](.*)

替换

<?php\n$1

我使用$1在php标记后添加\ n,否则用<?替换所有刺痛