【发布时间】:2011-03-05 16:27:10
【问题描述】:
我的目标是使用 ack 找到所有出现的“<?=”。我该怎么做?
ack "<?="
不起作用。请告诉我如何解决这里的转义问题?
【问题讨论】:
我的目标是使用 ack 找到所有出现的“<?=”。我该怎么做?
ack "<?="
不起作用。请告诉我如何解决这里的转义问题?
【问题讨论】:
ack -Q "<?="
如果您想通过简单的文本查找,这是最好的解决方案。
(如果你不需要通过正则表达式查找。)
【讨论】:
您可以使用 -Q 来引用所有需要被引用的字符,而不是试图记住哪些字符必须被转义。
【讨论】:
由于ack 使用Perl 正则表达式,您的问题源于在Perl RegEx 语言中,? 是一个特殊字符,意思是“最后一个匹配是可选的”。所以你正在寻找的是= 前面是可选的<
所以你需要转义 ? 如果这只是一个普通字符。
要逃脱,有两种方法-<\?= 或<[?]=;有些人发现第二种转义形式(将特殊字符放入字符类)比反斜杠转义更具可读性。
更新 正如 Josh Kelley 在评论中慷慨地添加的那样,第三种转义形式是使用 \Q 运算符,它会转义以下所有特殊字符,直到遇到 \E,如下所示: \Q<?=\E
【讨论】:
\Q<?=\E 转义所有特殊字符。
ack "<\?="
?是一个正则表达式操作符,所以需要转义
【讨论】: