如何在RegEx中返回字符串的第n行?
例如,如果字符串是:
This is line 1
Some other stuff
Return me!
如何在不匹配第三行的文本的情况下返回第三行?
我发现this返回第一行,但我不知道如何修改它以返回任何其他行#
答案 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];
答案 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!