1

我正在编写一个解析一些 shell 代码的 java 程序,我想删除 echo 语句中的内容。首先,我想使用整个 echo 命令。我的实际模式如下所示:

Pattern pat = Pattern.compile("echo[\\t ]+\".*?\"");

这将匹配 echo + 至少一个空格或制表符 + 双引号 + 最少的字符数(我使用了不情愿的量词) + 双引号。

问题是当我有这样的回声时:

echo "This will not \" work";

我的模式只会匹配到反斜杠。我能做些什么来解决这个问题?

4

2 回答 2

2

您可以使用否定后视来确保最后一个字符不是\

"echo[\\t ]+\".*?(?<!\\\\)\""

\\\\表示单个\字符。它需要\\为正则表达式转义,然后每个都\需要为编译器再次转义。

测试

更多关于环视

上面的一个问题是echo "\\"不匹配(大概\是转义字符,\\意思是\字符)。更正确的方法可能是检查\',并使用每个 后面的字符\

"echo[\\t ]+\"(\\\\.|[^\\\\])*?\""

测试

于 2013-07-11T11:49:59.457 回答
0

您可以创建一个\"专门匹配的替代品

echo[\\t ]+\"([^\\\\]|\\\\\")*?\"
于 2013-07-11T11:48:47.217 回答