描述
我会通过首先将字符串拆分为带引号或不带引号的字符串组来解决这个问题。
然后遍历匹配项,如果填充了捕获组 1,则引用该字符串,因此只需对替换捕获组 0 进行简单替换。如果未填充捕获组 1,则跳到下一个匹配项。
在每次迭代中,您都希望简单地构建一个新字符串。
由于拆分字符串是困难的部分,我会使用这个正则表达式:
("[^"]*")|[^"]*
例子
示例文本
"mission podcast" modcast A B C "D E F"
代码
PHP Code Example:
<?php
$sourcestring="your source string";
preg_match_all('/("[^"]*")|[^"]*/i',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
捕获组
$matches Array:
(
[0] => Array
(
[0] => "mission podcast"
[1] => modcast A B C
[2] => "D E F"
[3] =>
)
[1] => Array
(
[0] => "mission podcast"
[1] =>
[2] => "D E F"
[3] =>
)
)
PHP 示例
此 php 脚本将仅替换带引号的字符串中的空格。
工作示例:http: //ideone.com/jBytL3
代码
<?php
$text ='"mission podcast" modcast A B C "D E F"';
preg_match_all('/("[^"]*")|[^"]*/',$text,$matches);
foreach($matches[0] as $entry){
echo preg_replace('/\s(?=.*?")/ims','~~new~~',$entry);
}
输出
"mission~~new~~podcast" modcast A B C "D~~new~~E~~new~~F"