tvolf
Новичок
Добрый вечер всем.
Столкнулся с интересной проблемой. Имеется некоторая строка. Допустим,
Необходимо в ней заменить фразу "текст1" на фразу "text1", но только те вхождения, которые не содержатся внутри угловых скобок (в данном примере необходимо заменить первое и последнее "текст1").
Попробовал использовать preg_replace(). В качестве первого параметра передаю регулярное выражение
Но при замене получаю в качестве результата вместо правильного варианта вот что:
,
то есть, выпадают какие-то фрагменты текста.
Попробовал посмотреть, что возвращает preg_match_all() на эту строку:
Её вывод выглядит так:
То есть, кроме того, что нам нужно (находится в массиве под индексом 1), есть еще и полные вхождения выражения под индексом 0. И, видимо, именно они и используются preg_replace при замене.
Можно ли как-то этого избежать ? То есть, как исключить добавление полных выражений в результат ?
Я уже везде в тело регулярного выражения подобавлял к круглым скобкам "?:", чтобы они не включались в результат, но к самому верхнему выражению это, видимо, неприменимо.
Посоветуйте, плиз, что можно придумать ?
Заранее благодарю.
Столкнулся с интересной проблемой. Имеется некоторая строка. Допустим,
PHP:
$str = 'текст1 текст2 < текст1 текст4 > текст3 текст1';
Попробовал использовать preg_replace(). В качестве первого параметра передаю регулярное выражение
PHP:
$regExp = "/(?:^|>).*?(текст1).*?(?:<|$)/";
PHP:
text1 текст1 текст4 text1
то есть, выпадают какие-то фрагменты текста.
Попробовал посмотреть, что возвращает preg_match_all() на эту строку:
Её вывод выглядит так:
PHP:
Array
(
[0] => Array
(
[0] => текст1 текст2 <
[1] => > текст3 текст1
)
[1] => Array
(
[0] => текст1
[1] => текст1
)
)
Можно ли как-то этого избежать ? То есть, как исключить добавление полных выражений в результат ?
Я уже везде в тело регулярного выражения подобавлял к круглым скобкам "?:", чтобы они не включались в результат, но к самому верхнему выражению это, видимо, неприменимо.
Посоветуйте, плиз, что можно придумать ?
Заранее благодарю.