C# .NET正则表达式isMatch vs Matches问题
是的,这是另一个.net正则表达式问题:)(请原谅导致实际问题的冗长华夫饼) 我允许用户使用简单的日期/时间宏快速输入日期(他们不需要日期选择器) 例如,他们可以输入:C# .NET正则表达式isMatch vs Matches问题,c#,.net,regex,C#,.net,Regex,是的,这是另一个.net正则表达式问题:)(请原谅导致实际问题的冗长华夫饼) 我允许用户使用简单的日期/时间宏快速输入日期(他们不需要日期选择器) 例如,他们可以输入: d+1d-2h 这将为他们提供一个日期时间字符串,即今天的日期加上一天,减去两小时 无论如何,我已经创建了一个正则表达式来匹配这些正则表达式,它工作得很好(可能不是最好的方法,但它工作得很好!): \b[dtdtt](*[+-]*[1-9][0-9]**[dDhHmMwW])*\b 您可能已经猜到了,在解析这些条目以计算结果日期
d+1d-2h
这将为他们提供一个日期时间字符串,即今天的日期加上一天,减去两小时 无论如何,我已经创建了一个正则表达式来匹配这些正则表达式,它工作得很好(可能不是最好的方法,但它工作得很好!):
\b[dtdtt](*[+-]*[1-9][0-9]**[dDhHmMwW])*\b
您可能已经猜到了,在解析这些条目以计算结果日期时间之前,我正在使用正则表达式验证这些条目。起初,我使用了类似于:
Regex rgxDateTimeMacro = new Regex(@"\b[DTdt]( *[+-] *[1-9][0-9]* *[dDhHmMwW])*\b");
if(rgxDateTimeMacro.isMatch(strInput)){
...string passes...
}
然后我很快意识到,如果传递的字符串中有任何匹配项,isMatch将返回true,d+1d+1
将返回真值^__^ 所以我把它改成这样:
Regex rgxDateTimeMacro = new Regex(@"\b[DTdt]( *[+-] *[1-9][0-9]* *[dDhHmMwW])*\b");
MatchCollection objMatches = rgxDateTimeMacro.Matches(strInput);
if (objMatches.Count > 0)
{
// to pass.. we need a match which is the same length as the input string...
foreach (Match m in objMatches)
{
if (m.Length == strInput.Length)
{
...string passes...
}
}
}
现在这很好,但我的问题是:有没有更简单的方法来检查字符串(整个字符串)是否与正则表达式匹配?我用谷歌搜索过,但似乎找不到明显的答案
希望这有意义
皮特
更新 感谢所有的快速回答,^$成功:)
(显示我对正则表达式缺乏经验)如果我理解正确,请使用:
^my regex$
^
-字符串的开头$
-字符串的结尾使用此正则表达式:
"^\b[DTdt]( *[+-] *[1-9][0-9]* *[dDhHmMwW])*\b$"
^字符匹配字符串的开头,而$表示字符串的结尾。使用:
\Abla\Z
\A
主题的开头\Z
主题结束^bla$
^
行的开头$
行尾写一个更好的模式,只匹配你真正想要匹配的 我的建议
^[dtdtdt](\s+[+-]\s+[1-9][0-9]*[dDhHmMwW])+$
简短的解释以显示差异
1: ^ beginning of string
2: [DTdt] matches 1 character of the given
3: ( open group 1
4: \s+ one or more whitespaces
5: [+-] either + or -
6: \s+ see above
7: [1-9][0-9]* matches one number of 9 followed by none or more numbers of 10
8: [dDhHmMwW] one of the characters
9: ) close group 1
10: + let group 1 only repeat 1 or more times
11: $ end of string
我希望你能看到你的模式的不同之处
匹配:
D+19d
,t-99w+14d
,t+75m-64H
,D-1d+4m-44h
没有匹配项:
d
,d+1
,T+1H-2
,+1D-5M
,-134d
,T-4m
,T+5d5
,d-3m-5d+3g
在正则表达式中,可以使用^
和$/code>字符指示表达式应与整个测试字符串匹配:
^
因为第一个字符表示“从测试字符串开始匹配”
$
因为最后一个字符表示“匹配到测试字符串的末尾”
组合(例如,^abc$
)整个测试字符串必须与表达式匹配。+1:我认为您需要通过“多行模式”选项。+1我个人在我的大多数正则表达式中使用^$
<代码>[+|-]
可能是个错误(应该是“+|-”或[+-]
)。我还认为OP希望匹配较小的数字(甚至在示例中:d+1d-2h
),我在哪里写的[+|-]
?对不起,我刚刚编辑过;-)-为了只匹配小的数字,OP已经有一个错误的数字匹配。根据数字的不同,应该类似于[1-2][0-9]*
或[1-9]+
。。。