问题描述
|
我有一段代码序列,需要能够快速在几个不同的文件中找到。它具有以下形式:
<?php
//{{56541616
其中8位数字可以是任何数字和字母序列。我想使用正则表达式来定位代码,但是我对它们仍然是陌生的,这很复杂,以至于使我不知所措。这是我为正则表达式想到的,但是它似乎不起作用。
\"<\\?/php/n//\\{\\{[:alnum:]{8}\"
关于我做错了什么/实际正则表达式应该有什么建议?
更新:我无法获得任何答案来做我想要的事情。为了对我要执行的操作添加更多说明,有一段代码需要从几个文件中删除,以上序列是该代码的开头,需要删除。然后结束是类似的:
//}}18420732
?>
同样,8位代码可以是任何数字+字母序列。我正在尝试将awk与
/<string1>/,/<string2>/
查找介于两者之间的线的范围。因此,例如,使用给出的答案之一和我对第二行的解释,我将其放入命令行中:
awk {/<\\?php\\n\\/\\/\\{\\{([:alnum:]{8})/,/\\/\\/\\}\\}([:alnum:]{8})\\n\\?/} index.php
我得到这个回应:
-bash: syntax error near unexpected token `(\'
这是我尝试过的结果的另一个示例。
awk /<\\?php\\n\\/\\/\\{\\{[:alnum:]{8}/,/\\/\\/\\}\\}[:alnum:]{8}\\n\\?>/ index.php
-bash: ?phpn//{{[:alnum:]{8}/,///}}[:alnum:]{8}n?/: No such file or directory
有什么建议么?
解决方法
尝试一下:
/<\\?php\\s*\\/{2}\\{\\{(\\w{8})/i
, 您的正则表达式:
\“ <\\?/ php / n // \\ {\\ {[:alum:] {8} \”
怎么了:
报价-大多数语言中的正则表达式必须以/字符而不是引号开头和结尾。
/ PHP之前的不必要使用
在n之前使用/代替\\(用于匹配换行符)
不要转义文字中的/字符,因为这是一个特殊字符
解决方案:
/ <\\?php \\ n \\ / \\ / \\ {\\ {([:alnum:] {8})/
/字符已转义,n之前的斜杠已更正,并且括号包围\“ [:alnum:] {8} \”部分。这样做是为了使8位代码可以在变量$ 1中捕获,然后可以在代码中使用它。
, 像这样:
<\\?php\\s\\/\\/\\{\\{[0-9]{8}