我需要找到所有的短PHP标记。它的正则表达式<\?(?!php),但我不能在vim中使用它。如何将其“转换”为活力?
<\?(?!php)
6rqinv9w1#
对我来说,这一个工作很好:
<\?(?!php|xml)
c8ib6hqw2#
在vim中查找短标记的最好方法是查找所有出现的<?,后面不跟p:
<?
p
/<?[^p]
正则表达式在vim中失败的原因是因为/?找到了文字问号,而\?是一个量词; vim中的/<\?将尝试查找0或1个小于号。这与您在大多数正则表达式引擎中所期望的相反。如果要匹配紧跟在新行后面的短标签,就不能使用[^p],因为它要求有 something 来匹配,而不是p。
/?
\?
/<\?
[^p]
/<?\($\|[^p]\)
weylhg0b3#
使用(最新版本的)grep:
grep
grep -P '<\?(?!(php|xml|=))' *
要查找具有<?短标记的所有文件,请执行以下操作:
find -type f -exec grep -IlP '<\?(?!(php|xml|=))' {} +
请注意,这些标记与<?=短标记不匹配,因为从5.4.0开始它就是always available,而且它不会造成任何损害(而如果allow_short_tags = Off,则<?会造成损害)。
<?=
allow_short_tags = Off
oipij1gg4#
<\?(\t|\n|\s)
<?php$1
<\?
(\t|\n|\s)
$1
这里提供的所有解决方案都匹配行 * 不 * 包含的内容,而不是我们知道它将保证包含的内容。这允许您的代码格式保持一致,只在需要的地方添加文本php。我们只想匹配短标签,而不应该关心后面的内容(php/xml/= etc)。这个查找/替换将同时匹配内联短标签和单独一行上的短标签。
php
**注意:**如果您使用Windows换行符,则<\?(\t|\r\n|\s)将匹配相同内容.
<\?(\t|\r\n|\s)
3duebb1j5#
正确的前瞻模式是<?\(php\)\@!,它将匹配除后面跟有php的短标记之外的所有短标记有关前瞻/前瞻Assert的更多详细信息,只需在vim中键入:help \@
<?\(php\)\@!
:help \@
mznpcxlj6#
对弗雷德里克·皮尔的回答稍作修改
/<?[^p\n]
上面的答案不匹配一个开始短标记后面是一个换行符,这是隐藏在一些代码,我在看,这一个做...
rbpvctlc7#
要匹配<?而不是<?php,只需在vim中使用以下内容作为搜索词:
<?php
/以cmd模式开始搜索
/
wlp8pajw8#
我想通过查找和替换将PhpStorm中的所有<?标记替换为<?php。对我来说这很管用发现
<\?[^p](.*)
取代了
<?php\n$1
我正在使用$1在php标签后添加\n,否则它会将所有sting替换为<?
hjqgdpho9#
下面的正则表达式将只捕获<?
<\?(?!php|xml|=)
如果您还想捕获<?=,请使用以下代码:
9条答案
按热度按时间6rqinv9w1#
对我来说,这一个工作很好:
c8ib6hqw2#
在vim中查找短标记的最好方法是查找所有出现的
<?
,后面不跟p
:正则表达式在vim中失败的原因是因为
/?
找到了文字问号,而\?
是一个量词; vim中的/<\?
将尝试查找0或1个小于号。这与您在大多数正则表达式引擎中所期望的相反。如果要匹配紧跟在新行后面的短标签,就不能使用
[^p]
,因为它要求有 something 来匹配,而不是p
。weylhg0b3#
使用(最新版本的)
grep
:要查找具有
<?
短标记的所有文件,请执行以下操作:请注意,这些标记与
<?=
短标记不匹配,因为从5.4.0开始它就是always available,而且它不会造成任何损害(而如果allow_short_tags = Off
,则<?
会造成损害)。oipij1gg4#
寻找
替换
说明
<\?
,后跟空格、制表符或换行符(\t|\n|\s)
,并将其存储在$1
中这里提供的所有解决方案都匹配行 * 不 * 包含的内容,而不是我们知道它将保证包含的内容。这允许您的代码格式保持一致,只在需要的地方添加文本
php
。我们只想匹配短标签,而不应该关心后面的内容(php/xml/= etc)。这个查找/替换将同时匹配内联短标签和单独一行上的短标签。
**注意:**如果您使用Windows换行符,则
<\?(\t|\r\n|\s)
将匹配相同内容.3duebb1j5#
正确的前瞻模式是
<?\(php\)\@!
,它将匹配除后面跟有php
的短标记之外的所有短标记有关前瞻/前瞻Assert的更多详细信息,只需在vim中键入
:help \@
mznpcxlj6#
对弗雷德里克·皮尔的回答稍作修改
上面的答案不匹配一个开始短标记后面是一个换行符,这是隐藏在一些代码,我在看,这一个做...
rbpvctlc7#
要匹配
<?
而不是<?php
,只需在vim中使用以下内容作为搜索词:/
以cmd模式开始搜索wlp8pajw8#
我想通过查找和替换将PhpStorm中的所有
<?
标记替换为<?php
。对我来说这很管用
发现
取代了
我正在使用
$1
在php标签后添加\n,否则它会将所有sting替换为<?
hjqgdpho9#
下面的正则表达式将只捕获
<?
如果您还想捕获
<?=
,请使用以下代码: