- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Raku 的正则表达式预计将匹配最长的 token 。
事实上,在这段代码中可以看到这种行为:
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
为什么他们以不同的方式工作?有没有办法使用变量并仍然匹配最长的 token ?
最佳答案
这里有两件事在起作用。
第一个是“最长 token ”的含义。当存在交替时(使用 |
或通过使用 proto
正则表达式隐含),提取每个分支的声明性前缀。声明性表示可以通过 finite state machine 匹配的 Raku 正则表达式语言的子集.声明性前缀是通过采用正则表达式元素直到遇到非声明性元素来确定的。您可以 read more and find some further references in the docs .
要了解事情为什么会这样,绕一小段路可能会有所帮助。构建解析器的一种常见方法是编写一个分词器,将输入文本分解成一系列“标记”,然后是一个解析器,从这些标记中识别出更大的(可能是递归的)结构。标记化通常使用有限状态机执行,因为它能够快速减少搜索空间。使用 Raku 语法,我们不会自己编写分词器;相反,它会自动从我们的语法中提取(更准确地说,每个交替点计算一个标记器)。
其次,Raku 正则表达式是主要 Raku 语言中的一种嵌套语言,在一次传递中对其进行解析并同时进行编译。 (这与大多数语言不同,在大多数语言中,正则表达式作为我们传递字符串的库提供。)最长的标记计算发生在编译时。但是,变量是在运行时插入的。因此,正则表达式中的变量插值是非声明性的,因此不被视为最长标记匹配的一部分。
关于regex - 乐正则表达式 : Inconsistent longest token matching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64407663/
dic = {'a':4, 'b':5, 'cd':5 } 我正在寻找: 最高值(首先搜索最高值 => b, cd) 最长的键(然后搜索最长的键 => 'cd') 我使用以下代码: max_val =
dic = {'a':4, 'b':5, 'cd':5 } 我正在寻找: 最高值(首先搜索最高值 => b, cd) 最长的键(然后搜索最长的键 => 'cd') 我使用以下代码: max_val =
题目地址:https://leetcode.com/problems/longest-palindrome/open in new window Difficulty: Easy 题目描
题目地址:https://leetcode-cn.com/problems/longest-happy-string/ 题目描述 如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这
本文关键词:prefix, 公共前缀,题解,leetcode, 力扣,Python, C++, Java 题目地址:https://leetcode.com/problems/longest-com
最长回文子串,题解,leetcode, 力扣,python, C++, java 题目地址:https://leetcode.com/problems/longest-palindromic-sub
题目地址:https://leetcode.com/problems/longest-increasing-subsequence/description/ 题目描述 Given an unsor
题目地址:https://leetcode.com/problems/longest-palindromic-subsequence/description/ 题目描述 Given a strin
题目地址:https://leetcode.com/problems/longest-word-in-dictionary/description/open in new window 题目描述
题目地址:https://leetcode.com/problems/longest-mountain-in-array/description/ 题目描述 Let's call any (con
路由器 (IPv4) Destination Interface 0.0.0.0/0 m0 172.58.128.0/17 m1 1
我想找到给定目录中子目录中最长的路径,因为我遇到了这个错误: The specified path, file name, or both are too long. The fully qualif
我正在尝试创建一个Java程序,该程序读取键盘输入的数字字符串, 并给出最长的升序子字符串。 以下是我的代码: import java.util.Scanner; public class Ascen
我正在尝试编写一个正则表达式来识别单行文本,下划线 ( _ ) 被识别为行继续符。例如,“foo_\nbar”应被视为单行,因为“foo”以下划线结尾。我在尝试: $txt = "foo_\nbar"
我可能在这里做了一些非常愚蠢的事情,但我已经达到了 double 可以达到的极限,并且在我的编译器上(我在 mac 上使用最新的 xcode)long double 似乎也好不到哪里去。 我在别处读到
我已经阅读了 LCS 问题的解决方案。但是现在有一个最长相似子序列问题:序列 C 是两个序列 A、B 的相似子序列当且仅当 C 是 A 的子序列并且我们最多可以替换 C 中的 K 个元素使得 C 是
我将复习在寻找两个等长字符串的最长公共(public)子序列的上下文中讨论动态规划的笔记。有问题的算法输出长度(不是子字符串)。 所以我有两个字符串,比如说: S = ABAZDC,T = BACBA
题目是解决 Sedgewick Wayne 的 Python 书中的以下问题: 给定一个整数数组,编写一个程序,找出最长的连续等值序列的长度和位置,其中该序列前后元素的值较小。 我试过这个问题,遇到了
我们可以用DP(动态规划)找到两个字符串的LCS(最长公共(public)子序列)。通过跟踪 DP 表,我们可以获得 LCS。但是,如果存在不止一个濒海战斗舰,我们如何获得所有的濒海战斗舰呢? 例子:
过去两个小时我一直试图理解这个算法,但似乎无法理解。有人可以用通俗易懂的方式解释一下吗? function lis_length(a) n := a.length q := new A
我是一名优秀的程序员,十分优秀!