正则表达式中的空格

时间:2013-06-21 05:05:34

标签: regex automation lex

我利用这个软件,dk-brics-automaton来获得多个状态 正则表达式。现在,例如,我有这种类型的RE:

  ^SEARCH\s+[^\n]{10}

当我将其作为字符串插入下面时,编译器会说无效的转义序列

  RegExp r = new RegExp("^SEARCH\s+[^\n]{10}", ALL);

其中ALL是某个FLAG

当我在小s之前使用双反斜杠时,编译器会接受它 作为一个字符串,在这里\ s意味着空间,但我很困惑,当我将利用 然后它会考虑反斜杠和“s”,因为我的意思是白色空间。

现在,我有数千个这样的正则表达式,我想要计算有限自动机 那么,这是否意味着我必须在所有RE中手动添加反斜杠?

这是一个链接,他们已经解释了与此相关的内容,但我没有得到它:

  

http://www.brics.dk/automaton/doc/index.html

如果有人对此软件有过一些经验,或者您有任何想法解决此问题,请帮助我。

1 个答案:

答案 0 :(得分:1)

我再看看那份文件。 “automaton”是一个java包,因此我认为你必须把它们视为java正则表达式。所以只需加倍正则表达式中的每个反斜杠。

这里的问题是,Java不知道“原始”字符串。所以你必须逃避两个级别。评估转义序列的第一个级别是字符串级别。

字符串不知道转义序列\s,这是错误。 \n很好,字符串会对其进行评估,并将两个字符\(0x5C)和n(0x6E)存储为字符0x0A

然后存储字符串并将其移交给正则表达式构造函数。这里发生了下一轮的逃逸序列评估。

因此,如果你想要转义正则表达式级别,那么你必须加倍反斜杠。字符串级别会评估\\\,因此正则表达式级别会获得正确的转义序列。