正则表达式 - 即使它是空的,也可以在引号之间获取字符串

时间:2016-02-14 14:20:01

标签: regex

从此字符串中获取"Testing if \"quotes\" are working."
msgid "Testing if \"quotes\" are working.", 我正在使用这种模式:

~msgid(?:\s*)(\"[^\"](?:\\.|[^\"])*\")~m

但是,如果我有msgid ""

,则会失败

即使字符串为空,我怎样才能提取字符串?

2 个答案:

答案 0 :(得分:4)

这是因为构造#include <stdio.h> #import <Foundation/Foundation.h> 总是至少需要一个字符,当字符串为空时它不会找到。一个简单的解决方案是将其设为可选(添加[]):

?

请参阅a demo here on regex101.com

答案 1 :(得分:1)

您可以进一步使用此efficient technique来减少回溯。

msgid\s*("(?:[^\\"]*\\.)*[^\\"]*")

(如果双引号内没有任何内容,这也会匹配)

See demo at regex101

根据您使用模式的方式,可能需要进一步转义反斜杠,例如PHP:

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

See demo at eval.in