【问题标题】:php preg_split to find all words in a string is not workingphp preg_split 查找字符串中的所有单词不起作用
【发布时间】:2016-08-20 20:47:57
【问题描述】:

我正在使用 preg_split 将字符串拆分为单词。

但是,它不适用于从 mysql 文本列中获取的特定字符串。

如果我手动将字符串分配给变量,它会正常工作,但在从数据库中获取字符串时不会。

这是我正在使用的简单代码:

//The failing string. When manually assigned like this it works correctly

$string = "<p><strong>Iden is lesz lehetoseg a foproba és a koncert napjan ebedet kerni a MUPA-ban. Ára 1000-1200 Ft körül várható. Azoknak, akik még nem jártak a MUPA-ban ingyenes bejarasi lehetoseget biztositunk. Tovabba segitunk a pesti szallas megszervezeseben is, ha igenyt tartotok ra.</strong></p>";

$string = strip_tags(trim($string));

$words = preg_split('/\PL+/u', $string, null, PREG_SPLIT_NO_EMPTY);

以下是从数据库调用字符串时 preg_split 返回的内容:

array(1) { [0]=> string(269) "Iden is lesz lehetoseg a foproba és a koncert napjan ebedet kerni a MUPA-ban. Ára 1000-1200 Ft körül várható. Azoknak, akik még nem jártak a MUPA-ban ingyenes bejarasi lehetoseget biztositunk. Tovabba segitunk a pesti szallas megszervezeseben is, ha igenyt tartotok ra." }

有谁知道是什么导致 preg_split 对该字符串失败?

谢谢

【问题讨论】:

  • 它到底是怎么失败的?
  • @mistermartin - 请查看有问题的返回内容。它返回整个字符串而不是拆分它
  • The code looks working。也许-1null 更好?试试$words = preg_split('/\PL+/u', $string, -1, PREG_SPLIT_NO_EMPTY);
  • @PaulAtkins 您向我们展示了有效的代码,而不是无效的代码。
  • 您的评论说手动分配它时有效。 @WiktorStribiżew 测试页也可以。你怎么得到那个字符串?

标签: php regex preg-split


【解决方案1】:

我使用数据库中的字符串测试了您的代码,并发生了同样的错误,更改正则表达式,您将获得解决方案。使用这个表达式:

$words = preg_split('/[\s]/', $string, null, PREG_SPLIT_NO_EMPTY);


//var_dump result

array(42) {
  [0]=>
  string(4) "Iden"
  [1]=>
  string(2) "is"
  [2]=>
  string(4) "lesz"
  [3]=>
  string(9) "lehetoseg"
...
}

更新: 修饰符 /u 用于 UTF 8,可能你的数据库不是 UTF8,所以表达式不起作用

【讨论】:

    【解决方案2】:

    您不需要正则表达式,explode 将完成这项工作:

    $string = "<p><strong>Iden is lesz lehetoseg a foproba és a koncert napjan ebedet kerni a MUPA-ban. Ára 1000-1200 Ft körül várható. Azoknak, akik még nem jártak a MUPA-ban ingyenes bejarasi lehetoseget biztositunk. Tovabba segitunk a pesti szallas megszervezeseben is, ha igenyt tartotok ra.</strong></p>";
    $string = strip_tags(trim($string));
    $words = explode(" ", $string);
    print_r($words);
    

    输出:

    Array
    (
        [0] => Iden
        [1] => is
        [2] => lesz
        [3] => lehetoseg
        [4] => a
        [5] => foproba
        [6] => és
        [7] => a
        [8] => koncert
    ...
    

    Ideone Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2012-07-06
      • 2013-08-21
      • 2020-12-27
      • 2019-05-12
      • 2021-09-14
      • 1970-01-01
      相关资源
      最近更新 更多