Как вернуть n-ю строку строки в RegEx?
Например, если строка:
This is line 1
Some other stuff
Return me!
Как мне вернуть его третьей строке без соответствия текста, который находится в третьей строке?
Я нашел это, чтобы вернуть первую строку, но я не уверен, как ее изменить, чтобы вернуть любую другую строку #
Это не подходит для использования регулярных выражений. Вы можете просто попробовать это, поскольку @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];
Вы можете использовать конструкцию \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!
Вот еще один способ сделать это. Это приведет к захвату строки, которую вы хотите вернуть. Однако динамическое решение использования взрыва является более удобочитаемым/поддерживаемым.
$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];