PHP регулярное выражение, соответствующее первым и последним - PullRequest
0 голосов
/ 12 ноября 2009

Я новичок в регулярных выражениях и хотел бы сопоставить первое и последнее вхождения термина в php. например, в этой строке:

"Чарли, Мэри, Боб, Боб, Мэри, Чарли, Чарли, Мэри, Боб, Боб, Мэри, Чарли"

Я бы хотел получить доступ к первому и последнему "Чарли", но не к двум в середине. как бы я соответствовал первому и последнему вхождению термина?

спасибо

Ответы [ 4 ]

2 голосов
/ 12 ноября 2009

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

strpos - Найти позицию первого вхождения строки

strrpos - Найти позицию последнего появления символа в строке

0 голосов
/ 12 ноября 2009

Попробуйте взорвать строку.

$names = "charlie, mary,bob,bob,mary, charlie, charlie, mary,bob,bob,mary,charlie";
$names_array = explode(",", $names);

После этого у вас есть массив с именами. Вы хотите последний, поэтому он будет в позиции 0.

$first = $names_array[0];

С последним становится немного сложнее. Вы должны знать, сколько у вас имен [count ()], а затем, поскольку массив начинает отсчитываться от 0, вам нужно вычесть одно.

$last = $names_array[count($names_array)-1];

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

Удачи.

0 голосов
/ 12 ноября 2009

Вам нужно добавить символы ^ и $ в ваше регулярное выражение.

  • ^ - соответствует началу строки
  • $ - соответствует концу строки

В вашем случае ^charlie будет соответствовать первому сэмплу и charlie$ соответствует последнему сэмплу. Или, если вы хотите сопоставить оба, тогда это будет ^charlie|charlie$.

См. Также Начало строки и конец строки якоря для получения дополнительной информации об этих символах.

0 голосов
/ 12 ноября 2009

Попробуйте это регулярное выражение:

^(\w+),.*\1

Жадный квантификатор * позаботится о том, чтобы строка между первым словом (\w+) и другим вхождением этого слова (\1, соответствует первой группе) была максимально большой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...