2010-04-27 24 views
3

有没有办法在正则表达式模式中返回引用?您可以在正则表达式的模式部分使用反向引用吗?

例输入字符串:

Here is "some quoted" text. 

说我想拔出引用的文字,我可以创建下面的表达式:

"([^"]+)" 

这个正则表达式将匹配some quoted

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

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

但我不想正则表达式匹配如果输入的字符串有引号的混合物说Here is 'some quoted" text.什么。目前第二个例子中的正则表达式仍然匹配。

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

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


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

回答

4

您可以使用正则表达式的:

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

PHP你会使用这个为:

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

Working example

0

/"\(.*?\)".*?\1/应该工作,但是它依赖于正则表达式引擎

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

说明:(["'])([^"']+)\1/我把第一次报价在括号中。因为这是第一组,它的反向引用数量为1然后,在关闭的引号会是这样,我把\ 1,这意味着哪个字符组匹配1.

相关问题