当前位置: 首页 > 面试题库 >

PHP:正则表达式忽略引号内的转义引号

查飞星
2023-03-14
问题内容

在发布此内容之前,我仔细阅读了相关问题,并且无法修改任何相关答案以使用我的方法(不擅长使用正则表达式)。

基本上,这是我现有的行:

$code = preg_replace_callback( '/"(.*?)"/', array( &$this, '_getPHPString' ), $code );

$code = preg_replace_callback( "#'(.*?)'#", array( &$this, '_getPHPString' ), $code );

它们都匹配''和之间包含的字符串""。我需要正则表达式忽略它们之间包含的转义引号。因此,之间的数据''将被忽略,\'而之间的数据""将被忽略\"

任何帮助将不胜感激。


问题答案:

对于大多数字符串,您需要允许转义 任何内容
(而不仅仅是转义引号)。例如,你很可能需要允许转义字符像"\n""\t"当然,转义逃逸:"\\"

这是您要查找的正则表达式:

好:

"([^"\\]|\\.)*"
版本1:工作正常,但效率不高。

更好:

"([^"\\]++|\\.)*""((?>[^"\\]+)|\\.)*"
版本2:如果您拥有所有格限定词或原子组,则效率更高(请参阅:使用原子组方法的sin的正确答案)。

最好:

"[^"\\]*(?:\\.[^"\\]*)*"
版本3:效率更高。实现Friedl的 “展开循环” 技术。不需要所有格或原子组(即可以在Javascript和其他功能较少的正则表达式引擎中使用。)

这是PHP语法中针对双引号和单引号子字符串的推荐正则表达式:

$re_dq = '/"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"/s';
$re_sq = "/'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'/s";


 类似资料:
  • 问题内容: 仅使用正则表达式方法,方法String.replaceAll和ArrayList如何将字符串拆分为标记,但忽略引号内存在的定界符?分隔符是非字母数字或带引号的文本的任何字符 例如:字符串: 你好^世界’这*有两个令牌’ 应该输出: 你好 worldthis *有两个令牌 问题答案: 使用a 来标识要保留的部分,而不是要拆分的部分: 看到它在线上工作:ideone

  • 问题内容: 在我的一个项目中,我不得不处理逗号分隔文件(CSV)。我必须基于逗号来拆分数据,而忽略引号内的逗号(即),因此我使用了另一个堆栈溢出问题(Java:拆分逗号分隔的字符串但忽略了引号中的逗号)中提到的表达式。一切工作都很好,直到最近我才注意到它不适用于下面提到的一种特定情况。 我需要在逗号上拆分的数据字符串为: 以我的理解为基础 拆分后的数据应返回一个大小为10的数组,该数组的后两个索引

  • 我有一个非常好的正则表达式,它从文本中选择引用: 但是我需要一个正则表达式,它从没有引号的文本中选择引号。 例如,我有: 鲸鱼包括八个现存的家族:“鲸豚科”(白鲸),“鲸豚科”(露脊鲸),“鲸豚科”(侏儒露脊鲸),“白鲸科”(灰鲸),“独角鲸科”(白鲸和独角鲸),“抹香鲸科”(抹香鲸)。。。 我需要在引号之间提取文本: 龟甲翅目,龟甲翅目,龟甲翅目,... 要提取括号之间的文本,我使用正则表达式:

  • 我正在尝试匹配这些字符串: 单引号中不能包含双引号 双引号中没有双引号 单引号内的单引号-单引号只能包含内部的文本 我想出了以下正则表达式: 但它不起作用。

  • 问题内容: 我想构建一个简单的正则表达式,以涵盖带引号的字符串,包括其中的所有转义引号。例如, 显然,类似 不起作用,因为它与第一个转义的引号匹配。 什么是正确的版本? 我想对于其他转义字符,答案是相同的(只需替换相应的字符)。 顺便说一句,我知道“包罗万象”的正则表达式 但我会尽量避免使用它,因为毫不奇怪,它的运行速度要比更具体的设备慢。 问题答案: 所有其他答案的问题是,它们只适合最初的明显测

  • 问题内容: 我试图在Java中使用以下正则表达式,应该匹配任何正则表达式: 我知道正则表达式会将单个斜杠解释为斜杠,而不是转义字符(因此我的代码不起作用),但是如果我转义了斜杠,将不会再转义并且我会得到一个语法错误。 换句话说,如何在正则表达式中包含a ?将无法正常工作。我也尝试过三个斜杠,但也没有任何匹配。 我也知道您不使用regex解析XML / HTML的一般规则。(并且是XML)但是,我要