没有 g 标志 RegEX 返回有线输出
Posted
技术标签:
【中文标题】没有 g 标志 RegEX 返回有线输出【英文标题】:Without the g flag RegEX return wired output 【发布时间】:2021-09-26 06:43:39 【问题描述】:正则表达式
m/(b?)-/ [here no g flag]
示例输入
a-b-
当前匹配
-
想要的匹配
b-
我的疑问是为什么没有全局标志 b-
不匹配
(b?) 可以选择匹配文字 b
"-" 匹配文字 -
最后,我只得到-
这个?
$ echo "a-b-" | sed 's/\(b\?\)-/x\u\1/g'
axxB
$
$ echo "a-b-" | sed 's/\(b\?\)-/x\u\1/'
axb-
在最后一次 sed 替换中,-
的第一次出现被 x 替换,b-
呢
【问题讨论】:
请在您的问题中添加适当的问题陈述。输入是什么?您要在该输入中匹配什么? 如果没有全局标志,正则表达式将只返回第一个匹配项。由于您的正则表达式是b?-
和可选的b
,因此它首先从输入a-b-
返回-
。当有全局标志时,它将返回 2 个匹配项 ['-', 'b-']
嗨@TimBiegeleisen,我想使用“b?-”这个正则表达式匹配“b-”字符串。请看这个regex101.com/r/8GCQjr/1
请在您的问题中添加示例输入(无描述、无图像、无链接)和该示例输入所需的输出(无评论)。
@Cyrus 我会这样更新。
【参考方案1】:
如果没有全局标志,正则表达式将只返回第一个匹配项。由于您的正则表达式是b?-
和可选的b
,因此它首先从输入a-b-
返回-
。
如果您仍然想匹配 b-
,即使 -
先出现,那么您可以使用此正则表达式并带有负前瞻:
b?-(?!.*b-)
这将匹配可选的b
,后跟-
,前提是右侧没有b-
,因为我们使用的是负前瞻。
RegEx Demo 1
如果没有b-
,那么它将首先匹配-
。
RexEx Demo 2
【讨论】:
您现在可以看一下当前的问题吗? 是的,我已经这样做了,我的答案已经解决了这两种情况。让我知道哪种情况不包括在内? ?修饰符优先考虑字符的零次出现,对吧? b+- 会做正确的工作。我学到了一些东西。 是的b-
也可以完成这项工作,但它与x-y
中的-
不匹配
(b*)- 匹配 -b- [- 和 b-],正则表达式引擎中是否有任何反向遍历,b* 匹配任意数量的 b 并跟随“-”字符,但不知何故,b*前面的字符“-”也匹配了。以上是关于没有 g 标志 RegEX 返回有线输出的主要内容,如果未能解决你的问题,请参考以下文章
在 Hive 中使用 Regex Serde 创建表返回错误
使用Regex将变量传递到document.getElementById