如何将字符串与量词匹配为文字?

时间:2016-09-18 09:08:02

标签: regex scala

假设我有一个字符串:"....O RLY?.....WTF?"

我希望将它与模式相匹配:

val pattern = "BOTH SAEM|O RLY?|YA RLY|NO WAI|OIC|WTF?|OMG|GTFO|OMGWTF".r

但它永远不会捕获我的字符串中的?。所以我将其改为:

val pattern = "BOTH SAEM|O RLY\?|YA RLY|NO WAI|OIC|WTF\?|OMG|GTFO|OMGWTF".r

这次它引发invalid escape character错误。

我是Regex的新手,无法找到解决方案。请帮忙!

2 个答案:

答案 0 :(得分:1)

你需要两次逃避问号:

val pattern = "BOTH SAEM|O RLY\\?|YA RLY|NO WAI|OIC|WTF\\?|OMG|GTFO|OMGWTF".r

这里的解释是,您希望将\?提供给正则表达式引擎,告诉它将问号视为文字。但是你需要逃避反斜杠本身,这样Scala就不会认为你试图逃避Scala代码中的问号。

答案 1 :(得分:0)

通过两次转发问号,您可以避免此错误,但找不到您的替代O RLY?WTF?
您最好在模式中使用O RLY[?]WTF[?]来匹配文字字符?

为了测试这个,我使用了regex101.com

PS:如果你想在你的模式中处理结果use(),就像这样 (O RLY[?])