如何将其写为正则表达式?

时间:2011-05-27 19:50:27

标签: regex command-line

我有一系列代码,我需要能够快速找到几个不同的文件。它的格式为:

<?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

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

试一试:
/<\?php\s*\/{2}\{\{(\w{8})/i

答案 1 :(得分:1)

您的正则表达式

  

“&lt; \?/ php / n // \ {\ {[alnum:] {8}”

出了什么问题

  • 引用 - 大多数语言中的正则表达式必须以/字符开头和结尾,而不是引号。
  • 不必要的使用/之前的php
  • 在n之前使用/代替\(用于匹配换行符)
  • 不转义文本中的/字符,因为这是一个特殊字符

解决方案

  • /&LT; \ PHP \ n \ / \ / \ {\ {([:alnum:] {8})/
  • /字符已被转义,n更正前的斜线,而paranthesis包围“[:alnum:] {8}”部分。这个问题是8位代码将被捕获在变量$ 1中,然后您可以在代码中使用它。

答案 2 :(得分:0)

这样的事情:

<\?php\s\/\/\{\{[0-9]{8}