PHP中的乱码文本和正则表达式

时间:2011-03-15 13:33:04

标签: php regex

所以我有一些字符串(这是一小段代码),看起来类似于:

L L L LIL5LSOLSLQLL AL

BL

B6LLALBLYLL69L6KL6L6L7LLLLLLHZLMhuLPLHILHLHLILILQZLSoLULWLXL4L4L>LZLL

L

LoLzLVLVLLLLLLLDLeLkLLaLLLLLLL5M    5string1:string2:(RANDOM):string3:(RANDOM)R<baseversion><version>0000000297000000025309458093771<version><baseversion>  BLYLL69L6KL6L6L7LLLL

我希望提取符合模式的所有字符串:

string1:string2:[A-Za-z0-9]:string3:[A-Za-z0-9]

注意:整篇文章中有很多内容;但每次换行时只能找到一个,但不是每行都有。

任何指导都会受到很大关注:)

2 个答案:

答案 0 :(得分:0)

我不完全确定你想要提取什么,但是以下(未经测试)将仅提取整个匹配以及baseversion。

$handle = fopen('/path/to/file.txt', "r");
while (!feof($handle)) {
  $line .= fread($handle, 8192);
  if (preg_match('/string1:string2:.+?:string3:.+?R<baseversion><version>(.+?)<version><baseversion>/', $line, $matches)) {
    print 'Match:   '.$matches[0]."\n";
    print 'Version: '.$matches[1]."\n";
  } 
}
fclose($handle);

模式.*?是有趣的部分。尽管.*匹配的次数尽可能多,但.*?只会尽可能少地匹配。假设字符串是“xaaay”,那么模式/ xa + /匹配“xaaa”而/ xa +?/匹配“xa”。 (这个?的技术术语是“贪婪”。在文档中查看,ppl经常使用像lookahead这样的东西,因为他们不知道贪婪。)

我写了一张可能派上用场的备忘单:

http://www.bitcetera.com/en/techblog/2008/04/01/regex-in-a-nutshell/

作为旁注:[A-Za-z0-9]与随机字符不匹配,例如与“%”不匹配。

答案 1 :(得分:0)

听起来像你想要的那样:

/string1:string2:[A-Za-z0-9]+:string3:[A-Za-z0-9]+(?=R<baseversion>)/

您可以在此处使用命名组而不是前瞻,但这应该可以完成工作。此外,不确定您是否需要这些+符号,因为您的样本正则表达式没有它们。我有点猜测(RANDOM)位是什么样的。

请注意,此处的重点是捕获从string1但不包括 R<baseversion>的所有内容。看起来这就是你所要求的。