查找所有PHP短标记

oknrviil  于 2022-12-10  发布在  PHP
关注(0)|答案(9)|浏览(130)

我需要找到所有的短PHP标记。
它的正则表达式<\?(?!php),但我不能在vim中使用它。
如何将其“转换”为活力?

6rqinv9w

6rqinv9w1#

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

<\?(?!php|xml)
c8ib6hqw

c8ib6hqw2#

在vim中查找短标记的最好方法是查找所有出现的<?,后面不跟p

/<?[^p]

正则表达式在vim中失败的原因是因为/?找到了文字问号,而\?是一个量词; vim中的/<\?将尝试查找0或1个小于号。这与您在大多数正则表达式引擎中所期望的相反。
如果要匹配紧跟在新行后面的短标签,就不能使用[^p],因为它要求有 something 来匹配,而不是p

/<?\($\|[^p]\)
weylhg0b

weylhg0b3#

使用(最新版本的)grep

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

要查找具有<?短标记的所有文件,请执行以下操作:

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

请注意,这些标记与<?=短标记不匹配,因为从5.4.0开始它就是always available,而且它不会造成任何损害(而如果allow_short_tags = Off,则<?会造成损害)。

oipij1gg

oipij1gg4#

寻找

<\?(\t|\n|\s)

替换

<?php$1

说明

  • 仅 * 匹配短标签<\?,后跟空格、制表符或换行符(\t|\n|\s),并将其存储在$1

这里提供的所有解决方案都匹配行 * 不 * 包含的内容,而不是我们知道它将保证包含的内容。这允许您的代码格式保持一致,只在需要的地方添加文本php
我们只想匹配短标签,而不应该关心后面的内容(php/xml/= etc)。这个查找/替换将同时匹配内联短标签和单独一行上的短标签。

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

3duebb1j

3duebb1j5#

正确的前瞻模式是<?\(php\)\@!,它将匹配除后面跟有php的短标记之外的所有短标记
有关前瞻/前瞻Assert的更多详细信息,只需在vim中键入:help \@

mznpcxlj

mznpcxlj6#

对弗雷德里克·皮尔的回答稍作修改

/<?[^p\n]

上面的答案不匹配一个开始短标记后面是一个换行符,这是隐藏在一些代码,我在看,这一个做...

rbpvctlc

rbpvctlc7#

要匹配<?而不是<?php,只需在vim中使用以下内容作为搜索词:

/<?[^p]

/以cmd模式开始搜索

wlp8pajw

wlp8pajw8#

我想通过查找和替换将PhpStorm中的所有<?标记替换为<?php
对我来说这很管用
发现

<\?[^p](.*)

取代了

<?php\n$1

我正在使用$1在php标签后添加\n,否则它会将所有sting替换为<?

hjqgdpho

hjqgdpho9#

下面的正则表达式将只捕获<?

<\?(?!php|xml|=)

如果您还想捕获<?=,请使用以下代码:

<\?(?!php|xml)

相关问题