2015-09-10 2 views
1

У меня есть простой текст, используемый для генерации HTML, это текст:Regex удалить одиночные кавычки внутри одинарных кавычек внутри текста

lots of stuff 

<a onclick="javascript:do_things('http://somelink.to.something.com', 'string'with'bad'quotes'');"> 

lots of stuff 

Структура текста всегда то же самое, потому что текст в свою очередь, но последняя строка, используемая в качестве аргумента функции javascript, может измениться, она может иметь любое количество одинарных кавычек или вообще не указывать. Я хочу, чтобы заменить эти цитаты с \», так что результат:

lots of stuff 

<a onclick="javascript:do_things('http://somelink.to.something.com', 'string\'with\'bad\'quotes\'');"> 

lots of stuff 

Я получил это далеко:

onclick="javascript:do_things\('.*', '(.*)'\) 

, что дает мне этот матч:

string'with'bad'quotes' 

Но я убежище Мне не удалось сопоставить кавычки внутри, я имею в виду, что я мог бы сопоставить цитату с .*'.*, но как мне сопоставить любое количество котировок в любой позиции?

Thanks

+2

Невозможно исправить подстроку до того, как она будет конкатенирована в большую строку? –

+0

К сожалению, это уже есть в производстве, и я могу только изменить бэкэнд, обрабатывающий этот текст. – fuaaa

+0

Поскольку у вас уже есть текст '' string'with'bad'quotes''', почему бы не просто '' preg_replace ("/ '/", "\\'", "string'with'bad'quotes"); ' '? –

ответ

1

Как насчет этого?

$string = 'lots of stuff 

<a onclick="javascript:do_things(\'http://somelink.to.something.com\', \'string\'with\'bad\'quotes\'\');"> 

lots of stuff'; 
echo preg_replace_callback('~(<a\h*onclick="javascript:do_things\(\'.*?\',\h*\')(.*)(\'\);">)~', function($match){ 
       return $match[1] . str_replace("'", "\'", $match[2]) . $match[3];}, $string); 

Выход:

lots of stuff 

<a onclick="javascript:do_things('http://somelink.to.something.com', 'string\'with\'bad\'quotes\'');"> 

lots of stuff 

Regex101 Демо: https://regex101.com/r/rM5mM3/3

Мы захватить вторую часть функции затем выполнить замену всех одинарных кавычек в найденной строке.

+0

не знал о preg_replace_callback, но, похоже, именно то, что мне нужно – fuaaa

Смежные вопросы