假设我有一个字符串:"....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的新手,无法找到解决方案。请帮忙!
答案 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[?])