Вернуть n-ю строку

0

Как вернуть n-ю строку строки в RegEx?

Например, если строка:

This is line 1
Some other stuff
Return me!

Как мне вернуть его третьей строке без соответствия текста, который находится в третьей строке?

Я нашел это, чтобы вернуть первую строку, но я не уверен, как ее изменить, чтобы вернуть любую другую строку #

Теги:

3 ответа

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

Вы можете использовать конструкцию \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!  
  • 0
    классно! Это спасло меня! Не могу поверить, что понадобилось так много времени, чтобы найти это регулярное выражение, и не могу поверить, что я не смог понять это.
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];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню