2010-04-27 25 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.

相關問題