regex noob слышит. Через PHP и preg_replace()
…
Я пытаюсь это сделать.
id="New York State"
В этом.
id="New_York_State"
Но не это.
id="New_York_State"_class="United_States"
Все мои попытки были ужасны!
Я прочитал несколько руководств, но у меня все еще много проблем с составлением полезных шаблонов с правильным синтаксисом.
Пожалуйста, пожалуйста, включите объяснение шаблона регулярного выражения с вашим ответом! Кроме того, если вы это чувствуете, любые ссылки на хорошие учебники или статьи по регулярному регулярному PHP будут очень оценены. Благодаря!
Очень плохое решение:
$string = 'blabla id="New_York_State" class="United_States" blabla'; $new_string = preg_replace_callback('#\"([^"]*)\"#', function($m){ return('"'. str_replace(' ', '_', $m[1]) .'"'); }, $string); echo $new_string;
Вывод:
blabla id="New_York_State" class="United_States" blabla
Разрешить только id=
и class=
за двойными кавычками:
$string = 'blabla id="New_York_State" class="United_States" blabla "this won\'t get underscored" yaaaay'; $new_string = preg_replace_callback('#(?<=id=|class=)\"([^"]*)\"#', function($m){ return('"'. str_replace(' ', '_', $m[1]) .'"'); }, $string); echo $new_string;
Вывод:
blabla id="New_York_State" class="United_States" blabla "this won't get underscored" yaaaay
Использовать SimpleXMLElement
header('Content-Type:text/plain'); $xml = simplexml_load_file('log.svg', "SimpleXMLElement"); recursiveReplace($xml); echo $xml->asXML();
Используемая функция
function recursiveReplace(&$xml) { foreach($xml as $k => $value) { foreach($xml->attributes() as $n => $d) { $xml[$n] = preg_replace('/\s+/', '_', $d); } recursiveReplace($value); } }
Существует функция str_replace
.
Ваш код будет выглядеть так:
$ id = str_replace ("", "_", $ id); или лучше $ id = str_replace («штат Нью-Йорк», «New_York_State», $ id);