使用 PHP 从字符串中删除标点符号但不在收缩内

我正在编写将文本分解成单词并执行诸如计算单词大小之类的代码。


我想出了这个(经过一些搜索):


$text = preg_replace("/[^[:alnum:][:space:]]/u", ' ', $text);

$words = mb_split( ' +', $text );

但是,收缩不起作用,因为撇号和单引号看起来相同(因为它们是)。


我需要一种方法来分离单词但包括收缩。目前,我已经包含了所有我能想到的停用词的缩写,但这是最不令人满意的。我不擅长正则表达式,需要一些建议。


尽管我发布了自己的不雅解决方案,但我将这个问题悬而未决,希望能得到更完美的答案。


达令说
浏览 162回答 2
2回答

天涯尽头无女友

我已经在这方面工作了一段时间。评论和 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 );它使用两个统计上不太可能的字符串作为占位符,清理其余的字符串,将连字符和撇号放回原处,然后取出任何接触空格(和多个空格)的东西。它适用于我能找到的所有东西。如果可以,我想找到一个不那么繁琐的解决方案,但我的正则表达式技能可能无法胜任这项任务(即使打开了备忘单)。
打开App,查看更多内容
随时随地看视频慕课网APP