2 回答
TA贡献1831条经验 获得超9个赞
我已经在这方面工作了一段时间。评论和 Taha Paksu 非常有效的解决方案有助于帮助我思考问题。除了重音字母之外,Taha Paksu 的解决方案完全隔离了单词。谷歌搜索似乎表明 RegEx 对非 ascii 字符不太友好。
正是当我放弃尝试做正则表达式伏都教(任何可以得到我最深切尊重的人)时,我才想到了这个不太优雅的 hack。
$text = "Testing text. Café is spelled true. And pokémon too... ‘bad quotes’. (brackets)... Löwen, Bären, Vögel und Käfer sind Tiere. That’s what I said.";
$text = str_replace(array('’',"'"), '000AP000', $text);
$text = str_replace("-", '000HY000', $text);
$text = preg_replace("/[^[:alnum:][:space:]]/u", ' ', $text);
$text = str_replace('000AP000', "'", $text);
$text = str_replace('000HY000', "-", $text);
$text = str_replace(array("' ",'- ',' '," '",' -',' '), ' ', $text);
$words = mb_split( ' +', $text );
它使用两个统计上不太可能的字符串作为占位符,清理其余的字符串,将连字符和撇号放回原处,然后取出任何接触空格(和多个空格)的东西。它适用于我能找到的所有东西。
如果可以,我想找到一个不那么繁琐的解决方案,但我的正则表达式技能可能无法胜任这项任务(即使打开了备忘单)。
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报