如何匹配可选令牌中的命名捕获组?
我开始与此正则表达式包含命名捕获组EntityType
,EntityName
,和EntityId
:如何匹配可选令牌中的命名捕获组?
EntityType=(?<EntityType>.+)&EntityName=(?<EntityName>.+)&EntityId=(?<EntityId>[\w-]+)
每组针对该文本相匹配(注意在第二实施例&符):
EntityType=FundingRnd&EntityName=ABC&EntityId=df78abcd-fb75-473d-a4bb-412a9d89215c
EntityType=FundingRnd&EntityName=ABC & XYZ&EntityId=df78abcd-fb75-473d-a4bb-412a9d89215c
然后我发现最后的EntityId
部分必须是可选的,所以我用(
和)?
包装了正则表达式的EntityId部分:
EntityType=(?<EntityType>.+)&EntityName=(?<EntityName>.+)(&EntityId=(?<EntityId>[\w-]+))?
现在EntityId
组不再匹配相同的文本。
我正在使用带有“忽略大小写”开关的.NET Framework正则表达式引擎。测试工具是this one,它使用.NET引擎。
任何想法?目的是从这些组中提取文本。
+
操作符是贪婪的,并且与点组合会导致匹配发生到字符串的末尾和回溯,您将无法使用非贪婪+?
量词或者是因为可选组所以我会考虑使用否定。
EntityType=(?<EntityType>[^&]+)&EntityName=(?<EntityName>(?:(?!&EntityId).)+)(?:&EntityId=(?<EntityId>[\w-]+))?
道歉,我没有举一个很好的例子。问题是EntityName的值可能包含&符号。 – 2014-10-30 02:52:02
@AlexAngas修复了编辑。 – hwnd 2014-10-30 02:58:17
+1我几乎在那里:) – 2014-10-30 03:06:52
我试试这个正则表达式必要时应采取的。 (?
EntityType=((?:(?!(?:EntityType|EntityName|EntityId|&)).)*)\&EntityName=((?:(?!(?:EntityType|EntityName|EntityId)).)*)\&EntityId=((?:(?!(?:EntityType|EntityName|EntityId|&)).)*)
SEE DEMO?http://regex101.com/r/fM1mC8/2
试'的EntityType =&实体名称=( [^&] +)(&ENTITYID =( [\ W - ] +) )?'看到它在这里:http://regex101.com/r/kI4tV3/1 –
2014-10-30 02:46:52
@JorgeCampos道歉,我没有举一个很好的例子。问题是EntityName的值可能包含&符号。 – 2014-10-30 02:53:46
哼,现在这是一个问题...看看我能想出来... – 2014-10-30 02:55:27