есть строка, например: _это_та_самая_строка.окончание
с помощью какого регулярного выражения можно получить именно слово "строка?"
вариант '/\_(.+?)\./'
возвращает "это_та_самая_строка"
$text = '_это_та_самая_строка.окончание';
$pattern = '/\_(.+?)\./';
preg_match_all($pattern, $text, $matches);
echo '<pre>';
print_r( $matches );
echo '</pre>';
результат
Array
(
[0] => Array
(
[0] => _это_та_самая_строка.
)
[1] => Array
(
[0] => это_та_самая_строка
)
)
$text = '_это_та_самая_строка.окончание';
$pattern = '~.*_([а-я]+)\.~iu';
preg_match($pattern, $text, $matches);
echo $matches[1];// строка
Ваше регулярное выражение находит _
после которого в группу №1 захватываются любые символы, 1 и более раз, как можно меньше (т.к. +?
- "ленивый" квантификатор, заставляющий движок тестировать на совпадение последующие шаблоны и возваращаться к квантифицируемому только в случае неудачи), до самого первого вхождения символа .
. То есть .+?
"проглатывает" все символы _
по пути к первой точке.
Здесь несколько решений. Эдуард предлагает захватывать только 1 и более руссих букв после последнего _
и до первой точки. Если нет уверенности, что в этом месте в строке будут только русские буквы, воспользуйтесь исключающим символьным классом.
/_([^_.]+)\./
^^^^^^^^
Подробности:
_
- символ _
([^_.]+)
- 1 и более символов, отличных от _
и .
\.
- точка.PHP-демо:
$text = '_это_та_самая_строка.окончание';
preg_match_all('/_([^_.]+)\./u', $text, $matches);
print_r( $matches[1] ); // Только содержимое первой захватывающей группы
Если (у некоторых возникает такое) есть желание получить массив только с желаемым результатом (т.е. избавиться от захватывающей группы), можно использовать
preg_match_all('/_\K[^_.]+(?=\.)/u', $text, $matches);
print_r( $matches[0] );
Тут \K
удалит из текущего совпадения весь найденный до текущего момента текст, а (?=\.)
, блок предварительного просмотра вперёд, проверит, есть ли после 1+ символов, отличных от .
и _
, точка и вернёт совпадение только если точка будет найдена.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо сгенерировать случайные числа в диапазоне от 0 до 100 с шагом 1 (или 01 с шагом 0
Каждые 6 секунд получаю данные с АЦП через COMPORTКак по-вашему лучше (правильнее) оформить: через поток или через компонент Timer прямо в основной...
Здравствуйте! Возник такой вопрос: как сохранить бинарный файл (png) в памяти в поле Json::value (библиотека jsoncpp)? Мне это нужно для того, чтоб потом...