[英]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.