Соответствует определенной строке в строке, используя регулярное выражение

1

У меня есть строка, содержащая некоторые подстроки, разделенные новой строкой.

Например:

$x="This is the first line.
      This is the second line.
      This is the third line.";

Я хочу получить третью строку из этой строки,

Мое регулярное выражение:

/\s*([^\n]+)/i

Но это возвращает всю строку,

Я также пробовал

/\n{3}\s*([^\n]+)/i

Он ничего не сравнивал.

Есть ли способ в regex решить мою проблему? Я пытался решить это сам за последние 30 минут, но все мои попытки потерпели неудачу.

 preg_match_all("/\s*([^\n]+)/i",$x,$m);
print_r($m);

Спасибо!

  • 2
    Почему бы не взорваться с \n и получить последний предмет? Регулярное выражение необходимо, когда у вас есть сложные шаблоны. Здесь вам нужно получить какую-то конкретную строку.
  • 0
    Не могли бы вы привести полный пример строки, которую вы пытаетесь проанализировать, поскольку вы сказали, что это лишь малая часть большей строки, которую вы пытаетесь проанализировать ...
Теги:

2 ответа

5

Если я не понимаю сложность вашей ситуации, вы должны просто использовать explode() следующим образом:

$split = explode("\n", $x);
print_r($split[2]);
  • 0
    Также обрежьте вывод, так как кажется, что $x содержит начальные пробелы.
1

Просто используйте s модификатор вместе с $. В dotall mode $ совпадает с окончанием последней строки.

preg_match('~\s*([^\n]+)$~s',$x,$m);

DEMO

  • 1
    Вам не нужно /s . Я сомневаюсь, что вам здесь нужно регулярное выражение.
  • 0
    @Pemapmodder Я уже добавил это ..

Ещё вопросы

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