regex - 正则表达式中的空格

标签 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

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

最佳答案

我又看了一遍该文档。 “automaton”是一个java包,因此我认为你必须像对待java正则表达式一样对待它们。因此,只需将正则表达式中的每个反斜杠加倍即可。

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

字符串不知道转义序列\s,这就是错误。 \n 没问题,字符串对其求值并存储两个字符 \ (0x5C) 和 n (0x6E) 字符 0x0A.

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

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

关于regex - 正则表达式中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17228014/

相关文章:

rest - 飞盘 : response data extraction and conditional execution

c - Yacc 不解析 txt 文件中的第二个表达式

c++ - 使用 lex 和 yacc 构建 C++ 配置文件解析器

java - 如何从 Java 中的给定字符串中提取日期

ruby - 有没有办法在使用 `String#split` 迭代时访问最后一个匹配信息?

java - 解析此消息

angularjs - Angular SPA 的自动化可访问性测试工具

xml - 使用正则表达式检索 XML 命名空间

c# - 使用 Process.Start 打印文档而不显示 Word

c - 我在第二次输入语言时收到错误