- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Lark 解析器预定义了一些常见的终端,包括一个字符串。它的定义如下:
_STRING_INNER: /.*?/
_STRING_ESC_INNER: _STRING_INNER /(?<!\\)(\\\\)*?/
ESCAPED_STRING : "\"" _STRING_ESC_INNER "\""
_STRING_INNER
.我也明白如何
ESCAPED_STRING
被创作。但我不太明白的是
_STRING_ESC_INNER
.
最佳答案
预赛:
.*?
非贪婪匹配,意味着 .
的最短可能重复次数(任何符号)。这只有在后面跟着其他东西时才有意义。所以.*?X
在输入 AAXAAX
将仅匹配 AAX
部分,而不是一直扩展到最后 X
. (?<!...)
是“否定后视断言”( link ):“如果字符串中的当前位置前面没有...的匹配项,则匹配”。所以.*(?<!X)Y
会匹配 AY
但不是 XY
. ESCAPED_STRING
:规则说:“匹配 "
,然后是 _STRING_ESC_INNER
,然后是 "
”。 _STRING_INNER
: 匹配任何符号的最短可能重复次数。如前所述,这仅在考虑后面的正则表达式时才有意义。 _STRING_ESC_INNER
:我们希望它匹配不包含结束引号的最短字符串。也就是说,对于输入 "abc"xyz"
,我们要匹配 "abc"
,而不是同时消耗 xyz"
部分。但是,我们必须确保 "
确实是一个结束语,因为它本身不应该被转义。所以对于输入 "abc\"xyz"
,我们不想只匹配 "abc\"
,因为 \"
被逃脱了。我们观察到收盘"
必须直接在偶数 \
前面(零是偶数)。所以"
没问题,\\"
没问题,\\\\"
没问题等等。但尽快"
前面是奇数 \
,这意味着 "
并不是真正的结束语。(\\\\)
匹配 \\
. (?<!\\)
说“之前的位置不应该有\
”。如此结合(?<!\\)(\\\\)
表示“匹配 \\
,但前提是它前面没有 \
”。*?
然后做尽可能小的重复,这同样只有在考虑后面的正则表达式时才有意义,即 "
来自 ESCAPED_STRING
规则(可能的混淆点:\"
中的 ESCAPED_STRING
指的是我们想要匹配的实际输入中的文字 "
,就像 \\\\
指的是输入中的 \\
一样)。所以(?<!\\)(\\\\)*?\"
表示“匹配最短的 \\
后面是 "
并且前面没有 \
。所以换句话说, (?<!\\)(\\\\)*?\"
只匹配 "
前面是偶数个 |10467914|包括大小为 0 的块)。\
结合起来, _STRING_INNER
规则然后说:匹配第一个 _STRING_ESC_INNER
前面是偶数 "
,所以换句话说,第一个 \
哪里"
本身并没有逃脱。 关于python - lark 语法 : How does the escaped string regex work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61372172/
我一直在试验 lark ,但遇到了一个小问题。假设我有以下语法。 parser = Lark(''' ?start: value | start "or" value
我正在尝试编写一个 SMTP 解析器,并从 rfc 中获取一些引用字符串的信息。 .所以我有以下语法(取出所有有效的部分,关注无效的部分): quoted_string : /[\x22]/ qco
我的语法有一个优先级问题,我没有更多的想法来解决它。 我正在使用 Lark 事情是这样的(我已经尽可能地简化了问题): from lark import Lark parser = Lark(r"""
我正在尝试解析我正在编写的一些伪代码,但在获取符号值时遇到了一些问题。它解析成功,但不会返回与“常规”字符相同的值。这是一个例子: >>> from lark import Lark >>> pars
我正在为 rules_scala 实现类似 Strict Java Deps 的功能。 如果使用 warn 或 error,我真的很想能够在运行时进行配置。 我似乎记得 skylark 规则无法创建和
让我们首先考虑使用 lark 的简单 json 解析器: import sys from lark import Lark, Transformer, v_args json_grammar = r"
假设我有以下内容: items : (item separator)+ 这适用于: i1, i2, i3, 但不适用于: i1, i2, i3 如何做到不需要结尾分隔符? 最佳答案 这看起来更像是您需
我正在使用 lark,一个优秀的 python parsing library . 它提供了 Earley 和 LALR(1) 解析器,并通过 custom EBNF format 定义。 . (EB
如何实现可以导入文件并仍然使用 LARK 解析它的语法? 例如: @import file.txt ..... 最佳答案 我找到了一个看起来相关的 GitHub,这就是您要找的吗? https://g
考虑 Python Lark parser 的这个简单测试: GRAMMAR = ''' start: container* container: string ":" "{" (container
我正在尝试使用 lark 实现记录定义 DSL .它基于缩进,这让事情变得有点复杂。 Lark 是一个很棒的工具,但我遇到了一些困难。 这是我正在实现的 DSL 的一个片段: record Order
Lark 解析器预定义了一些常见的终端,包括一个字符串。它的定义如下: _STRING_INNER: /.*?/ _STRING_ESC_INNER: _STRING_INNER /(?
我正在尝试为 dsl 编写 lark 语法,但在使用此字符串插值语法时遇到了问题: " abc " <- normal string " xyz~{expression}abc " <- string
我在运行 checkov 时遇到一些问题,我不熟悉 python 库,任何人都可以给我一些提示吗? 这在某些机器上运行良好,但在这台机器上尤其不行...... 在 CentOS 中运行: $ chec
我已经编写了cs143 course中指定的decaf语法. 这是我的代码。 import sys from lark import Lark, Transformer, v_args decaf_g
我是一名优秀的程序员,十分优秀!