Raku正则表达式:最长的令牌匹配不一致

七月

Raku的正则表达式有望匹配最长的令牌。

实际上,此行为在以下代码中可见:

raku -e "'AA' ~~ m/A {say 1}|AA {say 2}/"
# 2

但是,当文本位于变量中时,它似乎无法以相同的方式工作:

raku -e "my $a = 'A'; my $b = 'AA'; 'AA' ~~ m/$a {say 1}|$b {say 2}/"
# 1

为什么它们以不同的方式工作?有没有办法使用变量并且仍然匹配最长的令牌?

乔纳森·沃辛顿

这里有两件事在起作用。

第一个是“最长令牌”的含义。如果存在交替(使用|或表示使用正则proto表达式),则提取每个分支声明性前缀声明性是指Raku regex语言的子集,可以由有限状态机进行匹配声明性前缀是通过使用正则表达式元素确定的,直到遇到非声明性元素为止。您可以阅读更多内容,并在docs中找到更多参考

要了解为什么事情会这样,绕一小圈可能会有所帮助。构建解析器的一种常见方法是编写一个标记器,将输入文本分解为一系列“令牌”,然后使用一个解析器从那些标记中识别更大的(也许是递归的)结构。令牌化通常使用有限状态机执行,因为它能够快速缩减搜索空间。使用Raku语法,我们不会自己编写令牌生成器。取而代之的是,它会自动为我们从语法中提取出来(更准确地说,每个替换点都会计算出一个标记符)。

其次,Raku regexes是主要Raku语言中的一种嵌套语言,与之一次性解析并同时编译。(这与大多数语言不同,后者将正则表达式作为我们传递字符串的库来提供。)最长的令牌计算在编译时进行。但是,变量是在运行时插值的。因此,正则表达式中的变量插值是非声明性的,因此不被视为最长标记匹配的一部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab正则表达式与令牌的行为不一致

来自分类Dev

正则表达式匹配中的不一致

来自分类Dev

正则表达式捕获的组与正则表达式的成功不一致

来自分类Dev

客观C正则表达式不一致

来自分类Dev

红宝石正则表达式不一致

来自分类Dev

group()和group()之间的Python正则表达式输出不一致

来自分类Dev

Java中不一致的正则表达式字符类

来自分类Dev

Javascript-正则表达式不一致

来自分类Dev

正则表达式验证不一致

来自分类Dev

C++ Visual Studio 2015 正则表达式不一致

来自分类Dev

Perl-正则表达式,有条件的,并针对不一致的字符串匹配多个对象

来自分类Dev

Perl-正则表达式,有条件的,并针对不一致的字符串匹配多个对象

来自分类Dev

Scala正则表达式:findAll和match之间的不一致...大小写

来自分类Dev

通过全局变量搜索时,perl正则表达式不一致

来自分类Dev

正则表达式捕获在所有事件上不一致的 IP 地址和用户名

来自分类Dev

正则表达式查找最长的匹配项

来自分类Dev

正则表达式查找最长的匹配项

来自分类Dev

最长路径正则表达式匹配

来自分类Dev

Java中的联合正则表达式匹配令牌

来自分类Dev

Java中的联合正则表达式匹配令牌

来自分类Dev

如何根据正则表达式的顺序而不是最长的长度匹配来匹配输入?

来自分类Dev

如何根据正则表达式的顺序而不是最长的长度匹配来匹配输入?

来自分类Dev

正则表达式以一致的顺序提取字符串的不同部分

来自分类Dev

您可以一致地进行正则表达式吗?

来自分类Dev

正则表达式用于一致的人名

来自分类Dev

正则表达式没有返回一致的结果

来自分类Dev

GString令牌的正则表达式

来自分类Dev

GString令牌的正则表达式

来自分类Dev

如何编写正则表达式以匹配elisp中最长的候选者?

Related 相关文章

  1. 1

    Matlab正则表达式与令牌的行为不一致

  2. 2

    正则表达式匹配中的不一致

  3. 3

    正则表达式捕获的组与正则表达式的成功不一致

  4. 4

    客观C正则表达式不一致

  5. 5

    红宝石正则表达式不一致

  6. 6

    group()和group()之间的Python正则表达式输出不一致

  7. 7

    Java中不一致的正则表达式字符类

  8. 8

    Javascript-正则表达式不一致

  9. 9

    正则表达式验证不一致

  10. 10

    C++ Visual Studio 2015 正则表达式不一致

  11. 11

    Perl-正则表达式,有条件的,并针对不一致的字符串匹配多个对象

  12. 12

    Perl-正则表达式,有条件的,并针对不一致的字符串匹配多个对象

  13. 13

    Scala正则表达式:findAll和match之间的不一致...大小写

  14. 14

    通过全局变量搜索时,perl正则表达式不一致

  15. 15

    正则表达式捕获在所有事件上不一致的 IP 地址和用户名

  16. 16

    正则表达式查找最长的匹配项

  17. 17

    正则表达式查找最长的匹配项

  18. 18

    最长路径正则表达式匹配

  19. 19

    Java中的联合正则表达式匹配令牌

  20. 20

    Java中的联合正则表达式匹配令牌

  21. 21

    如何根据正则表达式的顺序而不是最长的长度匹配来匹配输入?

  22. 22

    如何根据正则表达式的顺序而不是最长的长度匹配来匹配输入?

  23. 23

    正则表达式以一致的顺序提取字符串的不同部分

  24. 24

    您可以一致地进行正则表达式吗?

  25. 25

    正则表达式用于一致的人名

  26. 26

    正则表达式没有返回一致的结果

  27. 27

    GString令牌的正则表达式

  28. 28

    GString令牌的正则表达式

  29. 29

    如何编写正则表达式以匹配elisp中最长的候选者?

热门标签

归档