文件路径的正则表达式

时间:2010-03-20 17:21:00

标签: regex unix

嗨我需要一个正则表达式,它会给我这样的部分

./something\", [something.sh

来自此字符串

("./something\", [something.sh", ["./something\", [something.sh"], [/* 37 vars */])

可能吗?我真的遇到了麻烦,因为那里有“转义序列和那个','字符,所以我不能简单地使用匹配所有内容而不是这些字符。 我正在使用unix,因此也可以使用几个greps或类似的管道。 谢谢你的建议。

4 个答案:

答案 0 :(得分:1)

使用Perl,您可以使用具有extract_quotelike功能的Text::Balanced来执行您需要的操作。

您可以使用以下方式手动执行:

 /"((?:\\.|.)*?)"/

基本上:从引号开始,如果你看到\,抓住下一个字符(即使它是一个引用),否则继续直到看到引号。

答案 1 :(得分:1)

echo '("./something\", [something.sh", ["./something\", [something.sh"], [/* 37 vars */])' |
sed 's/.*\(\.\/something\\", \[something.sh"\).*/\1/'

答案 2 :(得分:1)

您的输入看起来像Python文字。您可以按原样评估:

$ echo '("./something\", [something.sh", ["./something\", [something.sh"], )' |\
> python -c'print input()[0]'

输出:

./something", [something.sh

或者对于多行情况:

$ echo '("./something\", [something.sh", ["./something\", [something.sh"], )' |\
> python -c'import ast, fileinput
> for line in fileinput.input():
>      print ast.literal_eval(line)[0]'

输出:

./something", [something.sh

答案 3 :(得分:-1)

这并不直接回答您的问题,但我的建议是让您的正则表达式首先快速,然后使用您使用的任何语言编写代码。

这个网站是我经常首先使用我的正则表达式的网站:www.regexr.com

这真的很好,因为它也会向你展示分组。