有没有办法在正则表达式模式中支持引用?
示例输入字符串:
Here is "some quoted" text.
假设我想提取引用的文本,我可以创建以下表达式:
"([^"]+)"
此正则表达式将匹配some quoted
。
说我希望它也支持单引号,我可以将表达式更改为:
["']([^"']+)["']
但是如果输入字符串混合了引号Here is 'some quoted" text.
,我会不希望正则表达式匹配。目前第二个例子中的正则表达式仍然匹配。
我希望能做的是如果第一个报价是双引号,那么结束报价必须是双倍。如果开始报价是单引号,则结束报价必须是单一的。
我可以使用反向引用来实现此目的吗?
我的其他相关问题:Getting text between quotes using regular expression
答案 0 :(得分:5)
您可以使用正则表达式:
(["'])[^"']+\1
()
:用于分组[..]
:是char类。所以["']
匹配"
或'
等效项
到"|'
[^..]
:带有否定的char类。
它匹配之后未列出的任何char
^
+
:一个或多个的量词\1
:反向引用第一个
组(["'])
在PHP
中,您将其用作:
preg_match('#(["\'])[^"\']+\1#',$str)
答案 1 :(得分:2)
preg_match('/(["\'])([^"\']+)\1/', 'Here is \'quoted text" some quoted text.');
说明:(["'])([^"']+)\1/
我在括号中放了第一个引号。因为这是第一个分组,它的后面引用号是1.然后,在结束引用的位置,我放置\ 1表示在组1中匹配的任何一个字符。
答案 2 :(得分:0)
/"\(.*?\)".*?\1/
应该可以工作,但这取决于正则表达式引擎