求“一次性分别对应替换多组字符串”的正则表达式

2024-11-17 13:47:44
推荐回答(2个)
回答1:

你这个替换和正则没关系,只是需要替换的内容比较多而已。
方法一:
使用EmEditor手动录制宏,在一个文本内把所有需要的内容都替换一遍,保存宏,到其他文本中就可以使用了。
方法二:
自己写简单的宏。
新建一个文本,输入以下内容:
document.selection.Replace("〔1〕","①",eeReplaceAll);
document.selection.Replace("〔2〕","②",eeReplaceAll);
……
依次类推,全部写完后,保存为xxx.jsee
然后宏》选择,选中你刚才写的宏,然后宏》运行宏,他就自己替换了。
如果需要替换的〔1〕格式不一,使用以下命令,
document.selection.Replace("[《(〔\\(]1[\\))》〕]","①",eeReplaceAll | eeFindReplaceRegExp);
对应的是(1)(1)《1》〔1〕全部替换为①,具体形式需要自己加到中括号内。
半角的括号需要转义,在脚本中前面需要加两个\\。

同时替换所有已打开文件。
把下面的代码复制到新文本中,保存为xx.jsee,剩下的操作方法同上。
var num = editor.Documents.Count;
for(i=0;i<=num,i++)
{
editor.ExecuteCommandByID(5376 + i);
document.selection.Replace("〔1〕","①",eeReplaceAll);
document.selection.Replace("〔2〕","②",eeReplaceAll);
……
}

大括号中的省略号部分自己改成需要的。
替换时,只打开需要替换的文本,其他不要开。

回答2:

可以试试这样子:

$string = "鲁迅〔1〕先生以杂文〔2〕为批判武器,所向披靡〔3〕地拼杀在旧中国的文坛上。";

$patterns[0] = "/\〔1\〕/";
$patterns[1] = "/\〔2\〕/";
$patterns[2] = "/\〔3\〕/";

$replacements[0] = "①";
$replacements[1] = "②";
$replacements[2] = "③";

echo preg_replace($patterns, $replacements, $string);
?>