Regex 如何用正则表达式替换句子中引号内的点

Regex 如何用正则表达式替换句子中引号内的点,regex,Regex,假设有这样的事情 Lorem ipsum dolor sit amet,是一位杰出的献身者“发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭和前庭。”Phasellus ut nunc neque,id varius n

假设有这样的事情

Lorem ipsum dolor sit amet,是一位杰出的献身者<代码>“发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭、发酵过程中的中间前庭和前庭。”Phasellus ut nunc neque,id varius nunc。在《圣经》中,布朗迪特和格言在,摩尔斯蒂在努克。你的舌苔在你的身体里<代码>“Morbi eu elit diam,sed tristique nunc。”

像这样

Lorem ipsum dolor sit amet,是一位杰出的献身者<代码>“奥古斯都的发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,发酵间前庭,我是瓦里乌斯努克。在《圣经》中,布朗迪特和格言在,摩尔斯蒂在努克。你的舌苔在你的身体里<代码>“Morbi eu elit diam,sed tristique nunc[点]”

不知何故,我找到了一个正则表达式来选择所有带有
“()+?”
的“{句子}”,或者像这样使用它们

regex(“()+?”,“[句子]”)

但是我们能做些什么,比如在一组中替换点吗?。因此,我可以像上面的示例一样获得输出?

尝试以下方法:
(\“[^\.]*)\([^\“]*)
\1[dot]\2


在我的编辑器中工作得很好,但有时使用$代替\来替换(例如在php中)

我不确定regexp是否能够满足您的需要

您应该实现一种算法来替换嵌套点,直到字符串不再包含嵌套点

例如,在PHP中:

$string = 'He asked "Please." while she answered "No. Or maybe yes."';
var_dump($string);
while(preg_match('/"[^"]*\.[^"]*"/', $string)) {
    $string = preg_replace('/("[^"]*)\.([^"]*")/', '$1[dot]$2', $string);
}
var_dump($string);
其中打印:

string 'He asked "Please." while she answered "No. Or maybe yes."' (length=57)
string 'He asked "Please[dot]" while she answered "No[dot] Or maybe yes[dot]"' (length=69)

这就是我要做的

echo
preg_replace_callback('~(?<!\\\)"(.+?)((?<!\\\)")~',
/*
Pattern:
--------
(?<!\\\)"       a double quote not preceded by a backward (escaping) slash
(.+?)           anything (with min 1 char.) between condition above and below
((?<!\\\)")     a double quote not preceded by a backward (escaping) slash
*/
// for anything that matches the above pattern
// the following function is called
create_function('$m',
'return preg_replace("~\.~","[dot]",$m[0]);'),
// which replaces each dot with [dot] and returns the match
$str);
echo

preg_replace_回调('~(?使用Javascript,我只需要做一个基本的替换:

str = str.replace(/".+?"/g,function(m) {
    return m.replace(/\./g,'[dot]');
});

是“任意字符”的字符。如果你想要一个文字点,你需要像
\”那样转义它。
不,这只是我进步的一个例子。我想我们可以使用两次正则表达式,这样我们就可以对每个组执行类似搜索的操作。
然后将它们转换为[dot]。但是我们仍然可以在一个preg replace函数中完成。您使用什么技术?我认为regexp本身无法满足您的需要。php ruby nodejs我认为它们都是相同的sp00m,它们有两个三个参数,比如
output=preg_replace('/regex/',what you want to regex'))
将是您想要的
但我目前正在使用node。@user1780413是的,但想法是替换嵌套的点,直到字符串不再包含嵌套的点。您是否要求对模式和/或代码进行解释?如果是这样,请告诉我。我会编辑我的答案。@inhan当然,如果不是trivi,您应该解释您的代码够了。我们应该如何学习呢?@sp00m我不确定OP是否特别问这个问题,或者一般来说如何使用这个PHP函数。nope im翻译成node.js代码,但是我认为人们也需要知道这一点。你应该在问题中使用Javascript标记,因为一些重要的规范并不适用于所有的正则表达式风格,比如作为查找和递归模式。出于这个原因,我不得不发布一个单独的答案。