PHP – регулярное выражение. Заменить любое место в цитате с помощью подчеркивания?

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);

Источник: http://php.net/manual/en/function.str-replace.php