【发布时间】:2020-02-17 15:18:45
【问题描述】:
请有人让下面的awk 行在 awk 中工作。语法使用标准的 PCRE 正则表达式标准(我需要期望在第一个数字之前有一些非数字字符,即字符串可能看起来像 "++3.59 ± 0.04* ")。 (请注意,我尝试了[0-9] 和[:digit:] 而不是\d)还请注意我确实阅读了https://www.gnu.org/software/gawk/manual/gawk.html#Regexp
gawk 'BEGIN{test="3.59 ± 0.04";match(test, /^.*?(\d+?\.\d+?)\s*?±\s*?(\d+?\.\d+?)$/, arr);print arr[1];}'
【问题讨论】:
-
POSIX 正则表达式引擎不支持惰性量词。继续尝试使用
[0-9]匹配数字,不支持\d。另外,请使用[ \t]或[[:space:]]而不是\s。 -
PCRE 根本不是标准的。最好的办法是改用 Perl。
-
@WiktorStribiżew 在 POSIX 标准中,
*是贪婪还是懒惰? -
它总是贪婪的。
标签: regex awk regex-greedy