返回第n行

时间:2014-11-10 18:34:03

标签: php regex

如何在RegEx中返回字符串的第n行?

例如,如果字符串是:

This is line 1
Some other stuff
Return me!

如何在不匹配第三行的文本的情况下返回第三行?

我发现this返回第一行,但我不知道如何修改它以返回任何其他行#

3 个答案:

答案 0 :(得分:2)

这不是使用正则表达式的好例子。您可以像@anubhava建议的那样试试这个:

$lines = explode("\n", $text);
echo $lines[2];

如果您真的想使用regex

$text="asdsa
asdas
sadas";

preg_match_all("|.+|",$text,$matches);
print_r($matches);
echo $matches[0][2];

http://ideone.com/mGRsdA

答案 1 :(得分:1)

这是另一种方法。这只会捕获您想要返回的行。但是,动态的使用爆炸的解决方案更具可读性/可维护性。

$lineNumber对行号使用偏移量为0。

$subject = "This is line 1\r\nSome other stuff\r\nReturn me!";

$lineNumber = 2;
preg_match("/(?:.*(?:(?:\r?\n)|(?:\r\n?))?){" . (($lineNumber < 1) ? 0 : 1) . ",". $lineNumber ."}(.*(?:(?:\r?\n)|(?:\r\n?))?)/", $subject, $results);

echo $results[1];

答案 2 :(得分:1)

您可以使用\K构造。

 #  '/(?:.*\r?\n){2}\K.*/'

 (?: .* \r? \n ){2}         # Nth - 1 lines
 \K                         # Do not include previous in match
 .*                         # Nth line

输出:

 **  Grp 0 -  ( pos 34 , len 10 ) 
Return me!