簡體   English   中英

用於匹配報價和單引號的正則表達式

[英]Regex for matching quotes and single quotes

我正在為ColdFusion代碼編寫解析器。 我正在使用正則表達式(在c#中)來提取cfquery標記的名稱datasource屬性。

目前正則表達式是以下<cfquery\\s.*datasource\\s*=\\s*(?:'|")(.*)(?:'|")

它適用於<cfquery datasource="myDS"<cfquery datasource='myDS'

但是解析像<cfquery datasource="#GetSourceName('myDS')#"這樣的字符串時會發瘋

顯然,正則表達式的一部分(?:'|')是原因。當第一個匹配是單引號時,有沒有辦法只匹配單引號?當第一個匹配是雙引號時,只匹配雙引號?

提前致謝!

編輯:我認為這應該在C#中工作,你只需要做一個后面的參考:

datasource\s*=\s*('|")(.*)(?:\1)

也許

datasource\s*=\s*('|")(.*)(?:$1)

datasource="#GetSourceName('myDS')#"與第一次匹配的后引用匹配為\\1

當然,你不能忽略第一個捕獲組?:仍然有這項工作。 此外,您可能希望設置lazy標志,以便不匹配其他" s”

如果可能的話,我建議使用兩個不同的正則表達式,或者以不同的方式分割正則表達式。

對於單個正則表達式,考慮@Mike發布的問題, ("[^"]*")|('[^']*')然后你可以解析出引號。

另一種可能的方法是使用先行/后視,但這往往會變得混亂,並且不受普遍支持。

試着看這篇文章:

如何將引號分隔的字符串與正則表達式匹配?

他們似乎正在處理同樣的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM