我试图使用正则表达式来选择像<?
这样的实例(使用php构造而不是<?php
。我已经在{{{I}上尝试了几次迭代3}}但失败了。这是最新的<\?(?!<\?php)
基本上这就是我想要的。它涵盖了我的文档中的所有变体
<?php foo ?> //should not match
<? bar ?> //should match '<?'
<?=foobar ?> //should match '<?='
<?xml barbar ?> //should not match
我是正则表达式的新手,所以任何帮助都会受到赞赏
修改:发布了回答的问题我还要再添加一个条件
<?php foo ?> //should not match
<? bar ?> //should match '<?'
<?bar ?> //should match '<?' there could be any character after ?
<?=foobar ?> //should match '<?='
<?xml barbar ?> //should not match
总结一下,我只是尝试匹配<?
或<?=
而不是它们出现的完整行。
编辑2 :基本上,表达式的逻辑应该是:匹配<?
或<?=
,但如果后面跟着`php&#39;或者&#39; xml&#39;
答案 0 :(得分:1)
您可以使用否定先行断言:
<\?=?(?!php|xml)
如果(?!php|xml)
ir php
之后有xml
或<?
文字, ,?=
将无法匹配,从而失败<?php
和{{ 1}}。
答案 1 :(得分:1)
您可以使用
<\?[^\w\s]+|<\?\B
请参阅regex demo
模式详情:
<\?[^\w\s]+
- 一个文字<?
序列,后跟一个字和一个空格以外的1个字符|
- 或<\?\B
- <?
文字字符序列后跟非字边界(意味着?
后面应该有一个非字字符。)答案 2 :(得分:0)
使用以下正则表达式: -
(<\?(?=\s).*)|(<\?=.*)
它将匹配两个记录
<? bar ?>
<?=foobar ?>
如果你只写
(<\?(?=\s))|(<\?=)
它仅匹配<?
和<?=
答案 3 :(得分:0)
我终于找到了它。
<\?=?(?!php)(?!xml)
这会将<?
与可选的=
匹配,而不会跟随字符串&#39; php&#39;和&#39; xml&#39;