我需要找到所有简短的PHP标签。
它的正则表达式<\?(?!php)
但我不能在vim中使用它。
如何将其“转换”为vim?
答案 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,否则用<?
替换所有刺痛