问题标签 [posix-ere]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
339 浏览

awk - 为什么有几个 Linux 发行版默认提供 mawk,即使它不符合 POSIX 标准?

mawk 不符合 POSIX,因为它不支持 POSIX ERE。

准确地说,它在其 ERE 中不支持像 [[:space:]] 这样的命名字符类,它们是 POSIX ERE 的一部分。

GNU awk 和 BusyBox awk 似乎都没有这个问题。

我在自己的 awk 脚本中多次遇到此问题,因为我真的很喜欢 [[:space:]] 来匹配 htab 以及空格和可能其他特定于语言环境的空白与单个字符类表达式。

所以我想知道为什么有几个 Linux 发行版选择在默认情况下为这样一个突出的实用程序提供一个不符合 POSIX 的实现,即使也可以使用符合 POSIX 的那些?

0 投票
0 回答
60 浏览

regex - 扩展正则表达式“。” 似乎不匹配一切

我有一个包含此标题FIELD1 FIELD2 : 0x30070040和许多垃圾字符的文件(文件大小的一半)。为了摆脱所有这些,我执行以下命令:

但后来我最终得到了一个包含这个奇怪标题的文件。如果我从 shell 复制并粘贴它,它看起来像这样:

如果我从像 VIM 这样的文本编辑器复制和粘贴,它看起来像这样:

请注意 FIELD1 之前的两个特殊字符

现在我想得到这样的标题:

FIELD1保留介于两者之间的所有内容也很重要,FIELD2因为那是文件的字段分隔符。我考虑过使用这个:

但显然与or.+FIELD1不匹配(无论哪个是真实的),所以我无法从正则表达式中提取。PFcount_01032019.txt0000777017777601777760116201541013436157760015052 0ustar nfsnobodynfsnobody▒▒FIELD1PFcount_01032019.txt0000777017777601777760116201541013436157760015052 0ustar nfsnobodynfsnobodyÿþFIELD1\1

不应该.匹配每个字符?为什么它与之前的内容不匹配FIELD1

0 投票
1 回答
124 浏览

regex - Bash 是否支持非贪婪正则表达式?

为什么我的正则表达式模式不懒惰?它应该捕获第一个数字,而不是第二个。

这是一个有效的 bash 脚本..

这是输出...

使用这个在线 POSIX 正则表达式测试器,正如我所料,它很懒惰。但是在 Bash 中它是贪婪的。数字捕获应该是 3.01,而不是 1.89。

0 投票
1 回答
146 浏览

regex - 使用 POSIX 扩展正则表达式查找和替换多个字符串

我正在使用 Snowflake 数据库,希望找到一个可以查找和替换多个项目的表达式。有问题的列包含包含 Y、Yes、N、NO 和其他不相关字符串的行。因此,在下面的示例中,Y 和 Yes 替换为 TRUE,N 和 No 替换为 FALSE,其他字符串保持原样。我在这上面浪费了太多时间。非常感谢任何帮助!

这有效: REGEXP_REPLACE(REGEXP_REPLACE(VALUE,'^y(es) $','TRUE',1,0,'i'),'^n(o) $','FALSE',1,0,'i ') 但我希望将其简化为单个表达式,因为还有其他需要的替换,并且我希望避免函数中出现大量函数...

这不起作用,但我认为它显示了目标:REGEXP_REPLACE(VALUE,'(y(es)?)|(N(o)?)','$1TRUE$2FALSE',1,0,'i')

https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended

0 投票
1 回答
495 浏览

regex - grep 的贪婪行为

我认为在正则表达式中,“贪婪”适用于量词而不是整体匹配。但是,我观察到

返回aab而不是aa b。

这同样适用于 sed。另一方面,在 pcregrep 等工具中,真正贪婪的是量词。这是 grep 的特定行为吗?

注意我检查了 grep (BSD grep) 2.5.1-FreeBSD 和 grep (GNU grep) 3.1

0 投票
1 回答
342 浏览

sql - Redshift / 正则表达式(Positive Lookbehind 和 Positive Lookahead)不起作用

我对 RegEx 还很陌生,正在尝试从以下文本中的键:值对中提取以下值-

要提取的值 -

RDU5

字符串 - "stopCode":"RDU5"

我正在使用以下表达式 - ((?<=stopCode\":\").*?(?="))

除了在 Redshift 上之外,此 RegEx 工作得非常好,因为 Redshift 不支持 Positive Lookbehind 和 Positive Lookahead。

您能否建议 Redshift 的替代方案是什么?我已经浏览了https://docs.aws.amazon.com/redshift/latest/dg/pattern-matching-conditions-posix.html但无法修改它以在 Redshift 上工作。

任何建议将不胜感激。

谢谢!

0 投票
1 回答
51 浏览

regex - 在字符类中查找和替换花引号

当我尝试在字符类中查找并用另一个字符替换花引号时,我得到了奇怪的结果:

如果您a用作替代品,您将获得aaafooaaa. 但这只是当花引号在字符类中时才会出现的问题。这有效:

谁能解释这里发生了什么?我仍然可以对花引号使用字符类吗?

0 投票
0 回答
19 浏览

regex - “最左边,最长”规则如何应用于 ERE 中的子表达式?

POSIX 标准规定对于 ERE 和 BRE :

与整个匹配是最左边匹配中最长的一致,每个子模式从左到右应匹配最长的可能字符串。为此,空字符串应被认为比完全不匹配要长。例如,匹配 BRE "(. ). " 和 "abcdef",子表达式 "(\1)" 是 "abcdef",匹配 BRE "(a*)*" 和 "bc",子表达式 "( \1)" 是空字符串。

我的问题:应该如何(a|ab)(c|bcd)(d*)匹配“abcd”?

我对上述标准的解读是,子表达式(a|ab)应该匹配最左边、最长的字符串,以尽可能长时间地保持整个匹配,因此子表达式应该匹配“ab”。但是,当我使用 GNU 正则表达式(a|ab)(c|bcd)(d*)在“abcd”中搜索时,我得到以下第一个子表达式:

这个例子来自这个页面

这是使用带有 regex::extended 标志的 Boost.Regex 的 C++ 代码:

编译并运行,产生:

在这里,与标准一致,子表达式(a|ab)与它可以匹配的最长匹配项匹配,但在 GNU 正则表达式中它不匹配。

0 投票
1 回答
72 浏览

regex - 如何在符合 POSIX BRE / ERE 的同时更改我的表达式以返回相同的结果?

我正在尝试使用 Snowflakes 正则表达式实现,我刚刚发现它是 POSIX BRE/ERE。我以前制作了一个正则表达式,以允许我使用自定义分隔符(用于文本文件解析)识别不在双引号字符串部分中的所有逗号。

示例文本字符串:

正则表达式命令和替换(在regex101.com中工作):

Regex101.com(和所需)结果:

所以,鉴于我现在才发现我不能使用惰性量词,任何 uber-regex'ers 都可以建议我如何在符合 POSIX BRE/ERE 的同时更改我的表达式以返回相同的结果?

0 投票
2 回答
54 浏览

regex - (regex,sed) 擦除单词后如何附加擦除的单词

我想改变什么

我想做的

我想拿起所有点(“。”),并想附加到行尾。
如果该行中没有点(“.”),则它只打印该行。

我可以擦除有点的行中的点。/\.:/但在这种情况下( ),我不能将点附加到行尾。

擦除单词后如何仅使用sed命令附加擦除的单词?