自动用 PHP 重音字母替换开引号
Automatically replace open quote with accented letter with PHP
如何将单词末尾的单引号转换为正确的重音单词,一些例子:
"Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica"
必须成为
"Questa città di nome 'ROMA' è davvero bella poiché molto antica"
不确定您想要使用哪种编程语言或应用程序,但也许像 PHP 的字符串替换功能一样可以? http://php.net/manual/en/function.str-replace.php - 当然假设您有一组有限的替换工作要做。
我建议您使用这样的 preg_replace_callback
函数:
$text = "Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica";
$callable = function($matches) {
$substitution = [
'a' => 'à',
'e' => 'è'
];
$replaced = $matches[2];
$replaced[strlen($replaced) - 1] = $substitution[$replaced[strlen($replaced) - 1]];
return $matches[1] . $replaced . $matches[3];
};
$result = preg_replace_callback( "/(^| )([A-Za-z]+)'( |$)/", $callable, $text);
echo $result;
因此您可以使用正则表达式执行此操作并捕获正确的字符,然后将它们替换为对应于带有重音字符的字符的 html 字符。
$subject = "Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica";
$pattern = "
/([\s]\w*) #Captures the word with accent letter
([aeiouyAEIOUY])\' #Captures the accent letter with the accent character.
/x";
$replacement = "´";
echo preg_replace($pattern, $replacement, $subject);
输出将是
Questa cittá di nome 'ROMA' é davvero bella poiché molto antica
(现在可以使用@Max regex 并稍作调整)
如果您正在寻找更好的方法然后使用 '
作为指示符,因为这限制为仅使用尖音符,您应该查看@flacle 答案。
第二种解决方案
发布第二个答案,因为其他答案没有考虑口音是重音还是重音以及提到的其他特殊情况here。
This PHP function 确实考虑了变音符号类型,想法是查看最后两个字符的字母和元音的组合,例如:
以一个元音结尾的单词:
- ...tà
- ...hé
- tè(注意 'tea' 的例外情况)
- ...nì
- ...nò
以两个元音结尾的单词:
- ...ià
- ...即
- ...iò
- ...iù
该函数确实有一些限制,即:
- 不处理 dare 的命令形式 da’
- 不处理 di’,dire 的命令式
最后还有一些假设
- 假设跳过开始和结束引号括起来的单词
也许 OP 可以详细说明这些规则是如何在他们的数据集中定义的。
如何将单词末尾的单引号转换为正确的重音单词,一些例子:
"Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica"
必须成为
"Questa città di nome 'ROMA' è davvero bella poiché molto antica"
不确定您想要使用哪种编程语言或应用程序,但也许像 PHP 的字符串替换功能一样可以? http://php.net/manual/en/function.str-replace.php - 当然假设您有一组有限的替换工作要做。
我建议您使用这样的 preg_replace_callback
函数:
$text = "Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica";
$callable = function($matches) {
$substitution = [
'a' => 'à',
'e' => 'è'
];
$replaced = $matches[2];
$replaced[strlen($replaced) - 1] = $substitution[$replaced[strlen($replaced) - 1]];
return $matches[1] . $replaced . $matches[3];
};
$result = preg_replace_callback( "/(^| )([A-Za-z]+)'( |$)/", $callable, $text);
echo $result;
因此您可以使用正则表达式执行此操作并捕获正确的字符,然后将它们替换为对应于带有重音字符的字符的 html 字符。
$subject = "Questa citta' di nome 'ROMA' e' davvero bella poiche' molto antica";
$pattern = "
/([\s]\w*) #Captures the word with accent letter
([aeiouyAEIOUY])\' #Captures the accent letter with the accent character.
/x";
$replacement = "´";
echo preg_replace($pattern, $replacement, $subject);
输出将是
Questa cittá di nome 'ROMA' é davvero bella poiché molto antica
(现在可以使用@Max regex 并稍作调整)
如果您正在寻找更好的方法然后使用 '
作为指示符,因为这限制为仅使用尖音符,您应该查看@flacle 答案。
第二种解决方案
发布第二个答案,因为其他答案没有考虑口音是重音还是重音以及提到的其他特殊情况here。
This PHP function 确实考虑了变音符号类型,想法是查看最后两个字符的字母和元音的组合,例如:
以一个元音结尾的单词:
- ...tà
- ...hé
- tè(注意 'tea' 的例外情况)
- ...nì
- ...nò
以两个元音结尾的单词:
- ...ià
- ...即
- ...iò
- ...iù
该函数确实有一些限制,即:
- 不处理 dare 的命令形式 da’
- 不处理 di’,dire 的命令式
最后还有一些假设
- 假设跳过开始和结束引号括起来的单词
也许 OP 可以详细说明这些规则是如何在他们的数据集中定义的。