【发布时间】:2010-05-20 08:07:29
【问题描述】:
我的应用程序将收到两个可能的字符串输入,如果它与以下两个字符串匹配,我需要它 regex.ismatch() 来返回 true:
"User * has logged out"
"User * has joined"
我不太擅长正则表达式,只是不知道如何匹配上述内容。
任何帮助都会很棒!!!
【问题讨论】:
我的应用程序将收到两个可能的字符串输入,如果它与以下两个字符串匹配,我需要它 regex.ismatch() 来返回 true:
"User * has logged out"
"User * has joined"
我不太擅长正则表达式,只是不知道如何匹配上述内容。
任何帮助都会很棒!!!
【问题讨论】:
假设您的意思是将* 字面上匹配为星号,那么您需要使用前面的\ 对其进行转义,如下所示。
@"^User \* has (logged out|joined)$"
如果 * 的意思是“任何用户名”,则将其替换为您用于验证用户名的正则表达式,或者如果没有更好的方法,您始终可以只使用 .*。
(logged out|joined) 构造称为“交替”。周围的括号除了在这种情况下强制交替使用优先级外,还将字符串 "logged out" 或 "joined" 捕获到第 1 组中,具体取决于哪个交替匹配。
如果你不需要区分这两个事件,那么你真的不需要捕获这个字符串,你可以使用非捕获组(?:logged out|joined),以获得轻微的性能提升。
^ 和$ 就是所谓的锚点,它们分别匹配字符串的开头和结尾。在模式中正确放置这些锚点可确保它匹配整个输入字符串,而不仅仅是子字符串。
【讨论】:
假设 * 将是一个用户名:
"User .+ has (joined|logged out)"
或者可能是这样的(可能需要用户名中的更多字符选项):
"User [A-Za-z0-1_]+ has (joined|logged out)"
【讨论】: