PHP正则表达式替换EM破折号

3

问题:你的示例代码有一个“N”破折号。你需要一个“M”破折号。只要在正则表达式中删除空格,你使用的代码就可以很好地处理“M”破折号。 - JBH
1
你只是想将所有的破折号规范化为“空格-空格”吗?我认为你可以使用 preg_replace('~\p{Pd}~u', ' - ', $s)。否则,只需使用 str_replace('—', ' - ', $s) 替换 EM-DASH 和 str_replace('–', ' - ', $s) 替换 EN-DASH。 - Wiktor Stribiżew
3个回答

3

为什么要使用八进制Unicode格式?为什么不直接使用十六进制格式或字符实体呢?

替换破折号

$dataold = "9am – 5pm"; // from a ms word doc
$data = mb_ereg_replace(" – ", " - ", $dataold);
print_r($data);

替换破折号

$dataold = "9am — 5pm"; // from a ms word doc
$data = mb_ereg_replace(" — ", " - ", $dataold);
print_r($data);

你的原始代码基本正常,除了样例文本字符串中有一个N-dash,而你却在测试M-dash。此外,你的正则表达式中还有额外的空格。请尝试这个...

$dataold = "9am — 5pm"; // from a ms word doc
$data = mb_ereg_replace("[\xE2\x80\x94]", " - ", $dataold);
print_r($data);

因为如果字符串中有任何Unicode字符,那么它将很难维护。使用正确的代码会更清晰。 :) - yacc

0

试试这个:

$dataold = "9am – 5pm"; // from a ms word doc
$data = mb_ereg_replace("/ \\x{2014} /u", " - ", $dataold);
print_r($data);

哎呀,没运气 :/。 - Steve
仍然得到相同的结果:/ - Steve
好的,那这个怎么样? - yacc

0
我已经解决了,但是——字符直接从你粘贴的页面复制(从你的代码复制不起作用)。
<?php
$dataold = "9am — 5pm"; // from a ms word doc
$data = mb_ereg_replace("\x{2014}", "dash", $dataold);
print_r($data); // output = 9am dash 5pm

演示:https://3v4l.org/9Lkpr


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接