对于PHP中的自定义脚本解析器,我想替换包含双引号和单引号的多行字符串中的一些单词。但是,只能替换引号之外的文本。
Many apples are falling from the trees.
"There's another apple over there!"
'Seedling apples are an example of "extreme heterozygotes".'
例如,我想把“苹果”换成“梨”,但只在引用句子之外。所以在这种情况下,只有“许多苹果从树上掉下来”里面的“苹果”才是目标。
以上将给出以下输出:
Many pears are falling from the trees.
"There's another apple over there!"
'Seedling apples are an example of "extreme heterozygotes".'
我怎样才能做到这一点?
只是一个想法:通过删除引用的部分来创建一个临时字符串,替换需要的部分,然后添加删除的引用部分。
我想到了这个:
function replaceOutsideDoubleQuotes($search, $replace, $string) {
$out = '';
$a = explode('"', $string);
for ($i = 0; $i < count($a); $i++) {
if ($i % 2) $out .= $a[$i] . '"';
else $out .= str_replace($search, $replace, $a[$i]) . '"';
}
return substr($out, 0, -1);
}
逻辑是:用双引号分解字符串,因此返回字符串数组的奇数元素表示引号外的文本,偶数元素表示双引号内的文本。
所以,您可以通过交替连接原始零件和替换零件来构建输出,好吗?
这里的工作示例:http://codepad.org/rsjvCE8s
此函数的作用是:
function str_replace_outside_quotes($replace,$with,$string){
$result = "";
$outside = preg_split('/("[^"]*"|\'[^\']*\')/',$string,-1,PREG_SPLIT_DELIM_CAPTURE);
while ($outside)
$result .= str_replace($replace,$with,array_shift($outside)).array_shift($outside);
return $result;
}
它是如何工作的它按带引号的字符串拆分,但包括这些带引号的字符串,这将在一个数组中提供交替的非引号、引号、非引号、引号等字符串(一些非引号的字符串可能为空)。然后,它在替换单词和不替换单词之间交替进行,因此只替换未加引号的字符串。
以你为例
$text = "Many apples are falling from the trees.
\"There's another apple over there!\"
'Seedling apples are an example of \"extreme heterozygotes\".'";
$replace = "apples";
$with = "pears";
echo str_replace_outside_quotes($replace,$with,$text);
输出
Many pears are falling from the trees.
"There's another apple over there!"
'Seedling apples are an example of "extreme heterozygotes".'
问题内容: 如何使用PHP 用(我认为其称为单引号)替换(我认为它称为双引号)? 问题答案: 或重新分配
本文向大家介绍js 单引号替换成双引号,双引号替换成单引号的实现方法,包括了js 单引号替换成双引号,双引号替换成单引号的实现方法的使用技巧和注意事项,需要的朋友参考一下 1.双引号替换成单引号 2.单引号替换成双引号 以上这篇js 单引号替换成双引号,双引号替换成单引号的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
我目前正在使用一个替换脚本来自动修复单引号和双引号。 但是,我找不到一个解决方案来更改嵌套在另一个双引号内的任何地方的双引号 “在'abc'开头和结尾有一些额外的文本” 目前,我只能自动修复这个类型,如果它在其他引号旁边(例如“abc”)使用一个简单的替换脚本 和
问题内容: 这实际上有什么区别? 这工作正常: 但以下操作无效: 这是为什么? 问题答案: 那是因为双引号被认为是标准的,而单引号却没有。这并不是真正针对JQuery,而是关于JSON标准。因此,无论使用JS工具包,您都应该期待相同的行为。 值可以是带双引号的字符串,也可以是数字,也可以是true或false或null,或者是对象或数组。这些结构可以嵌套。
问题内容: 我正在读取CSV文件,并且有一些值,例如 将文件读取为并转换后,我将文件内容分割为:。 在迭代字符串时,我得到以下值: 如何将两个双引号替换为像这样的“双”的单双 这是我的代码:- 问题答案: 使用。 http://ideone.com/xPQqL