我使用这个软件 dk-brics-automaton 来获取状态数 的正则表达式。现在,例如我有这种类型的 RE:
^SEARCH\s+[^\n]{10}
当我将其作为字符串插入下面时,编译器说无效的转义序列
RegExp r = new RegExp("^SEARCH\s+[^\n]{10}", ALL);
其中 ALL 是某个 FLAG
当我在小 s 之前使用双反斜杠时,编译器会接受它 作为一个字符串,这里的\s 表示空格,但是当我使用时我很困惑 双反斜杠,那么它只会考虑反斜杠和“s”,因为我的意思是空格。
现在,我有数千个这样的正则表达式,我想为其计算有限自动机 那么,这是否意味着我必须在所有 RE 中手动添加反斜杠?
这是一个链接,他们解释了与此相关的内容,但我不明白:
如果有人有过使用此软件的经验,或者您有任何解决此问题的想法,请帮助我。
最佳答案
我又看了一遍该文档。 “automaton”是一个java包,因此我认为你必须像对待java正则表达式一样对待它们。因此,只需将正则表达式中的每个反斜杠加倍即可。
这里的问题是,Java 不识别“原始”字符串。所以你必须逃两层关卡。评估转义序列的第一个级别是字符串级别。
字符串不知道转义序列\s
,这就是错误。 \n
没问题,字符串对其求值并存储两个字符 \
(0x5C) 和 n
(0x6E) 字符 0x0A
.
然后存储该字符串并将其交给正则表达式构造函数。这里发生下一轮转义序列评估。
因此,如果您想转义正则表达式级别,则必须将反斜杠加倍。字符串级别会将 \\
评估为 \
,因此正则表达式级别会获得正确的转义序列。
关于regex - 正则表达式中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17228014/