我寫過「\{(?:!USER.)(.*?)\}"
正則表達式」 「#」代表任意字符C#模式{!USER。####},{{!USER。####},{!USER。####}}的正則表達式
{!USER.####}
什麼是正確的正則表達式匹配波紋管模式也?但不應該與{!USER.####}
模式相匹配
{{!USER.NAME}} , {{!USER.PHONE}, {!USER.NAME}}
我寫過「\{(?:!USER.)(.*?)\}"
正則表達式」 「#」代表任意字符C#模式{!USER。####},{{!USER。####},{!USER。####}}的正則表達式
{!USER.####}
什麼是正確的正則表達式匹配波紋管模式也?但不應該與{!USER.####}
模式相匹配
{{!USER.NAME}} , {{!USER.PHONE}, {!USER.NAME}}
要放棄其中{!USER.XXX}
包含單個{
和}
所有比賽。
一個簡單的辦法是捕捉1+ {
S和}
s轉換不同的組,然後檢查是否任一方的長度大於1。如果是,你可以抓住的比賽,否則,將其丟棄。
var str = "{{!USER.NAME}} , {{!USER.PHONE}, {!USER.NAME}} {!USER.####}";
var result = Regex.Matches(str, @"({+)!USER\.(.*?)(}+)")
.Cast<Match>()
.Where(x => x.Groups[1].Length > 1 || x.Groups[3].Length > 1)
.Select(m => m.Value)
.ToList();
({+)!USER\.(.*?)(}+)
的圖案將捕獲1+ {
字符到第1組,將匹配USER.
,然後將捕捉到第2組的任何0+字符,儘可能少,直至第一{
,其中有1次以上的事件將被捕獲到組3中.行將過濾掉那些不需要的行。
它的工作原理。謝謝解釋 –
如果你想匹配,但也有一些例外你想忽略嗎?
然後,您可以使用負面預覽(?!
。
在下面的正則表達式中,單詞NAME或PHONE不能位於點的後面。
\{!USER\.(?!(?:NAME|PHONE)\})(.*?)\}
需要輸出什麼?嘗試['{+!USER \。(。*?)} +'](http://regexstorm.net/tester?p=%7b%2b!USER%5c.%28.*%3f%29%7d %2b是I =%7B%7B!USER.NAME%7D%7D +%2C +%7B%7B!USER.PHONE%7D%2C +%7B!USER.NAME%7D%7D +)。那麼,[你的正則表達式](http://regexstorm.net/tester?p=%5c%7b%28%3f%3a!USER.%29%28.*%3f%29%5c%7d&i=%7b% 7b!USER.NAME%7d%7d +%2c +%7b%7b!USER.PHONE%7d%2c +%7b!USER.NAME%7d%7d +)已經可以捕獲'NAME','PHONE'和'NAME',目前還不清楚你的模式有什麼問題。 –
你嘗試過什麼嗎? – BugFinder
@WiktorStribiżew我想改變模式來識別其他格式 –