Используя изменяемый подход, мы можем использовать for_each
для непосредственного обновления элементов последовательности посредством ссылок.
for_each(begin(myv1), end(myv1), [](double& a) { a *= 3; });
for_each
модифицировать элементы, как это называется «неизменяющим» алгоритмом. Это означает, что for_each
не разрешается изменять последовательность , на которой он работает (что относится к изменениям структуры последовательности - то есть делает недействительными итераторы). Это не означает, что мы не можем модифицировать неконстантные элементы вектора как обычно - сама структура не затрагивается этими операциями.
Если вас не волнуют проблемы JavaScript и CSS, упомянутые в другом месте, попробуйте следующее:
$text = "<TEXTFORMAT LEADING='2'><P ALIGN='LEFT'><FONT FACE='Verdana' style='font-size:10' COLOR='#0B333C'>My name's Mark</FONT></P></TEXTFORMAT>";
echo preg_replace('/<([^<>]+)>/e', '"<" . str_replace("\\\\\'", \'"\', "$1") . ">"', $text);
Это взято из темы кем-то с точно такой же проблемой, что и вы, по адресу devshed.com .
Не совсем уверен, что именно вы пытаетесь выполнить ... Замену частей строки с помощью php можно выполнить с помощью функции str_replace:
str_replace("'", "\"", $yourString);
Используйте Tidy , который может исправить ваш HTML-код и вывести чистый XHTML. Он делает и другие приятные вещи, например, исправляет проблемы с вложением, теги в нижнем регистре и так далее.
Я знаю, что могу использовать регулярное выражение, но попробуйте: присвойте $ string содержимое, используя fpen (), fread () и т. Д. ..
$string = str_replace("'", '"', $string);
$array = explode('>', $string);
foreach($array as $key => $value){
if(strpos($value, '<') <> 0 ){
$array[$key] = str_replace('"', "'",$value);
}
}
$string = implode('>',$array);
Я бы пошел с парсером dom или использовал свой собственный простой парсер тегов, который понимает цитирование, а также экранирование символов кавычек, так что это не требует ", - сказал он \" бла \ ""
как он сказал \
, бла \
и пустая строка .
Он мог определить, находится ли изменяемое цитирование внутри легко помечать. За много лет я понял, что регулярные выражения слишком уязвимы для таких задач.
Да, это намного сложнее, чем вы могли догадаться это так. В некоторых культурах правила другие, и без знания того, на какой культуре вы хотите основывать их, становится невозможно. Рассмотрим известный (среди молодых людей) пример турецкого .
что вы имеете в виду все одинарные кавычки, содержащие атрибут. Вы бы не хотели, чтобы
преобразовал b / c, это нарушило бы код.
Любое регулярное выражение будет хрупким. Если вы знаете, что ваш ввод будет конкретным набором простых случаев, вас может устроить регулярное выражение . В противном случае вам понадобится парсер DOM, который понимает сложную разметку HTML, например onmouseover = "(function () {document.getElementById (''); alert (\" ... \ ") ...}) ( ) "
(например). Добавьте к этому атрибут, который может охватывать несколько строк. ;)
В последнее время мне не приходилось решать эту конкретную проблему, но, возможно, есть хороший способ сделать это с помощью HTML Tidy (подробнее здесь: http: //devzone.zend. com / article / 761 ) или подобный парсер http://sourceforge.net/projects/simplehtmldom/