我需要正则表达式的帮助,因为我对它没有很好的了解。
我有正则表达式:
Regex myregex = new Regex("testValue=\"(.+?)\"");
(。+?)表示什么?
它匹配的字符串是"testValue=123e4567"
并返回123e4567
作为输出。
现在我需要正则表达式的帮助来匹配字符串"<helpMe>123e4567</helpMe>"
,我需要123e4567作为输出。我该如何为它编写正则表达式?
答案 0 :(得分:4)
这意味着:
( Begin captured group
. Match any character
+ One or more times
? Non-greedy quantifier
) End captured group
对于正则表达式,非贪心量词?
表示您捕获的组将在第一次双引号后开始,然后在它遇到的下一个双引号之前结束。如果它是贪婪的(没有?
),该组将扩展到它在该行遇到的 last 双引号(即,“贪婪地”消耗尽可能多的行可能的)。
对于“helpMe”示例,您需要此正则表达式:
<helpMe>(.+?)</helpMe>
鉴于此字符串:
<div>Something<helpMe>ABCDE</helpMe></div>
你会得到这场比赛:
ABCDE
非贪婪量词的值在此变体中很明显:
Regex: <helpMe>(.+)</helpMe>
String: <div>Something<helpMe>ABCDE</helpMe><helpMe>FGHIJ</helpMe></div>
贪婪的捕获看起来像这样:
ABCDE</helpMe><helpMe>FGHIJ
有一些有用的互动工具可以使用这些变体:
答案 1 :(得分:2)
Ken Redler有一个great answer。对于第二个问题,请尝试:
<(helpMe)>(.*?)</\1>
使用back reference \1
,您可以找到匹配标记集之间的值。第一组查找标记名称,第二组匹配内容本身,\1
后引用重新使用第一组匹配(在本例中为标记名称)。
此外,在C#中,您可以使用命名组,例如:<(helpMe)>(?<value>.*?)</\1>
现在match.Groups["value"].Value
包含您的值。
答案 2 :(得分:0)
(。+?)表示什么?
这意味着匹配任何字符(。)一次或多次(+?)
匹配第二个字符串的简单正则表达式是
<helpMe>([a-z0-9]+)<\/helpMe>
这将匹配a-z
和any digit
内<helpme>
和</helpMe>
的任何字符。
pharanteses用于捕获一组。如果您稍后需要引用该组内的值,这将非常有用。