我利用这个软件,dk-brics-automaton来获得多个状态 正则表达式。现在,例如,我有这种类型的RE:
^SEARCH\s+[^\n]{10}
当我将其作为字符串插入下面时,编译器会说无效的转义序列
RegExp r = new RegExp("^SEARCH\s+[^\n]{10}", ALL);
其中ALL是某个FLAG
当我在小s之前使用双反斜杠时,编译器会接受它 作为一个字符串,在这里\ s意味着空间,但我很困惑,当我将利用 然后它会考虑反斜杠和“s”,因为我的意思是白色空间。
现在,我有数千个这样的正则表达式,我想要计算有限自动机 那么,这是否意味着我必须在所有RE中手动添加反斜杠?
这是一个链接,他们已经解释了与此相关的内容,但我没有得到它:
如果有人对此软件有过一些经验,或者您有任何想法解决此问题,请帮助我。
答案 0 :(得分:1)
我再看看那份文件。 “automaton”是一个java包,因此我认为你必须把它们视为java正则表达式。所以只需加倍正则表达式中的每个反斜杠。
这里的问题是,Java不知道“原始”字符串。所以你必须逃避两个级别。评估转义序列的第一个级别是字符串级别。
字符串不知道转义序列\s
,这是错误。 \n
很好,字符串会对其进行评估,并将两个字符\
(0x5C)和n
(0x6E)存储为字符0x0A
。
然后存储字符串并将其移交给正则表达式构造函数。这里发生了下一轮的逃逸序列评估。
因此,如果你想要转义正则表达式级别,那么你必须加倍反斜杠。字符串级别会评估\\
到\
,因此正则表达式级别会获得正确的转义序列。