我试图在非字母数字字符上分割字符串或简单地将字符串拆分。我立即想到的方法是使用正则表达式。
示例:
$string = 'php_php-php php';
$splitArr = preg_split('/[^a-z0-9]/i', $string);
但是我用这种方法看到了两个问题。
$string = 'U.S.A-men's-vote';
$splitArr = preg_split('/[^a-z0-9]/i', $string);
[{U}{S}{A}{men}{s}{vote}]
[{U.S.A}{men's}{vote}]
所以我的问题是:
此致
答案 0 :(得分:3)
你安装了PHP(然后你也有PCRE),或者你没有。所以你的第一点不是问题。
然后,如果要从分割分隔符中排除标点符号,则需要将它们添加到角色类中:
preg_split('/[^a-z0-9.\']+/i', $string);
如果你想根据上下文不同地处理标点字符(例如,如果后跟空格,则只做一个点作为分隔符),你也可以这样做:
preg_split('/\.\s+|[^a-z0-9.\']+/i', $string);
答案 1 :(得分:2)
听起来像str_word_count()使用经常被遗忘的1或2值作为第二个参数的情况,并且第三个参数包含连字符,句号和撇号(或者您想要作为单词处理的任何其他字符) - 部分)作为一个词的一部分;然后是结果数组值开头或结尾的array_walk()到trim个字符,因此只有当它们实际嵌入"字时才会包含它们。
答案 2 :(得分:1)
根据我的评论,您可能想尝试(根据需要添加尽可能多的分隔符)
$splitArr = preg_split('/[\s,!\?;:-]+|[\.]\s+/', $string, -1, PREG_SPLIT_NO_EMPTY);
然后你必须处理一个“引用”字的情况(在正则表达式中这并不容易,因为'是'“这个'引用了?以及如何?)。
所以我认为最好将'和'保持在单词之内(这样“它就是”单个单词,而“它们就是两个单词”)然后分别处理这些情况。例如正则表达式会有正确处理方面有些麻烦
they 're 'just friends'. Or that's what they say.
虽然有“'re”和一系列单词,其中第一个是左引用而最后一个是右引,第一个不是已知序列('s,'re,'ll,'d。 ..)可以在应用程序级别处理。
答案 3 :(得分:0)
这不是一个php问题,而是一个逻辑问题。
单词可以通过 - 连接。缩写可能看起来像短句。
您可以通过创建仅适合此特定短语的解决方案来直接匹配您的示例。但你无法得到所有可能的短语的解决方案。这需要基于神经元计算的内容识别。