【发布时间】:2016-02-28 18:57:11
【问题描述】:
我有以下 pcre 可以正常工作:
/[c,f]=("(?:[a-z A-Z 0-9]|-|_|\/)+\.(?:js|html)")/g
它从输入中生成所需的输出“foo.js”和“bar.html”
<script src="foo.js"...
<link rel="import" href="bar.html"...
问题是,OS X 版本的 grep 似乎没有像 -o 这样的选项来仅打印捕获的组(根据另一个 SO 问题,这显然适用于 linux)。由于这将是 makefile 的一部分,因此我需要一个可以在任何 *nix 平台上运行的版本。
我尝试了 sed 但以下
s/[c,f]=("(?:[[:alphanum:]]|-|_|\/)+\.(?:js|html)")/\1/pg
引发错误:“重复运算符的操作数无效”。我试过把它修整下来,不包括文件路径分隔符,我似乎无法破解它。任何帮助将我的 pcre 翻译成我几乎可以保证在符合 POSIX 的(即使是非官方的)平台上拥有的东西?
附:我知道我编写的正则表达式中固有的潜在故障模式,它只会用于具有相当特定格式的非常特定的文件。
【问题讨论】:
-
没有 "universal" 正则表达式,FTFY ;-)
-
@LucasTrzesniewski 没有,但有通用的 POSIX 实用程序,如 grep 和 sed。问题是 grep 标志显然是平台相关的(沿着 BSD/gnu 行),我不知道如何在 sed 中做到这一点。我只是不能指望 pcregrep 或 gnu grep。不过,您的编辑肯定是有说服力的。