Как составить регулярку на PHP по поиску кавычек вне тега

anser06
На сайте с 11.03.2006
Offline
276
976

Не могу правильно составить регулярное выражение на PHP. Оно должно находить любую кавычку ", которая не находится между < и >.

Типа такого:

/[^<][\"][^>]/

Это в принципе реально? Есть мнение, что невозможно.

bay_ebook
На сайте с 28.05.2010
Offline
111
#1

сначала strip_tags удаляем теги, потом ищем кавычки :)

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
anser06
На сайте с 11.03.2006
Offline
276
#2

К сожалению, вырезать теги нельзя. Все нужно оставить там, где и было.

TF-Studio
На сайте с 17.08.2010
Offline
334
#3

1. Заменить все теги на массив (чтобы потом можно было вернуть)

2. Вырезать лишнее

3. Вернут теги обратно

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
siv1987
На сайте с 02.04.2009
Offline
427
#4

Уже обсуждалась подобная тема, - вырезаем теги, делаем замену, возвращаем теги.

Как вариант, вместо массива можете заменить на '~~'.base64_encode($match).'~~'

/ru/forum/comment/12189361

A
На сайте с 19.07.2010
Offline
130
#5

проще, конечно, теги в массив или кавычки внутре тегов заменить на другой символ, зачистить, а потом символ назад в кавычки.

но ради любви к искусству, набросал регулярку, вроде работает...

возвращает строки с кавычками вне тегов.


$q = 'we"w <div class= "q12" >aaaa aa </div " >qqqqq <div class= "q12" >aaaa "1"2"dd </div> w"ww';
if( preg_match_all('%>([^<]+\")%s', ">".$q, $mm) ){
print_r( $mm[1] );
}else{
echo "none\n";
}

если нужно заменять кавычки вне тегов, то нужно эту регулярку засунуть в preg_replace_callback и внутри колбека делать замену.

пример заменяет двойную кавычку на одинарную вне тегов:


$q = 'we"w <div class= "q12" >aaaa aa </div " >qqqqq <div class= "q12" >aaaa "1"2"dd </div> w"ww';

$out = substr( preg_replace_callback('%>([^<]+\")%s', "_callback", ">".$q), 1);

echo " INPUT=$q=\n";
echo "OUTPUT=$out=\n";

function _callback( $mm ){
return str_replace('"', "'", $mm[0]);
}

upd: немного уменьшил регулярку


$out = substr( preg_replace_callback('%>[^<]+\"%s', "_callback", ">".$q), 1);
.............
anser06
На сайте с 11.03.2006
Offline
276
#6

Всем спасибо, вопрос удалось решить.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий