你能在正则表达式的模式部分使用反向引用吗?

时间:2010-04-27 15:21:32

标签: php regex backreference

有没有办法在正则表达式模式中支持引用?

示例输入字符串:

Here is "some quoted" text.

假设我想提取引用的文本,我可以创建以下表达式:

"([^"]+)"

此正则表达式将匹配some quoted

说我希望它也支持单引号,我可以将表达式更改为:

["']([^"']+)["']

但是如果输入字符串混合了引号Here is 'some quoted" text.,我会不希望正则表达式匹配。目前第二个例子中的正则表达式仍然匹配。

我希望能做的是如果第一个报价是双引号,那么结束报价必须是双倍。如果开始报价是单引号,则结束报价必须是单一的。

我可以使用反向引用来实现此目的吗?


我的其他相关问题:Getting text between quotes using regular expression

3 个答案:

答案 0 :(得分:5)

您可以使用正则表达式:

(["'])[^"']+\1
  • ():用于分组
  • [..]:是char类。所以["'] 匹配"'等效项 到"|'
  • [^..]:带有否定的char类。 它匹配之后未列出的任何char ^
  • +:一个或多个的量词
  • \1:反向引用第一个 组(["'])

PHP中,您将其用作:

preg_match('#(["\'])[^"\']+\1#',$str)

Working example

答案 1 :(得分:2)

preg_match('/(["\'])([^"\']+)\1/', 'Here is \'quoted text" some quoted text.');

说明:(["'])([^"']+)\1/我在括号中放了第一个引号。因为这是第一个分组,它的后面引用号是1.然后,在结束引用的位置,我放置\ 1表示在组1中匹配的任何一个字符。

答案 2 :(得分:0)

/"\(.*?\)".*?\1/应该可以工作,但这取决于正则表达式引擎