【问题标题】:preg_split every character, but don't split if is quote [duplicate]preg_split 每个字符,但如果是引号则不要拆分 [重复]
【发布时间】:2017-07-09 12:30:25
【问题描述】:

我正在使用以下代码将我的 UTF-8 字符串拆分为字符:

$characters = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);

在某些情况下,一个字符后面可能有一个单引号。例如:hel'lo。我想保留该引号及其前面的字符。

使用上面的正则表达式,我的数组是这样的:

Array
(
    [0] => h
    [1] => e
    [2] => l
    [3] => '
    [4] => l
    [5] => o
)

我希望数组是:

Array
(
    [0] => h
    [1] => e
    [2] => l'
    [3] => l
    [4] => o
)

我该怎么做? 谢谢!

(单引号可以在字符串的开头、结尾和中间)。

【问题讨论】:

  • 如果您处理 UTF8 字符串,我不会使用 preg_split。我建议 preg_match_all("~\X'?~u", $s, $m) 获取所有 Unicode 字符,并在它们后面加上可选的 '。我不清楚您的其他带有初始' 的案例,请在问题中添加详细信息。
  • 请在拆分'hellohello'时显示您的预期结果。对于第一个示例,单引号之前没有字符 -- ' 应该单独使用还是绑定到 h

标签: php arrays regex utf-8 preg-split


【解决方案1】:

而不是split,您可以使用preg_match_all

'?\p{L}'?

即Unicode 字母前后的可选'

preg_match_all("/'?\\p{L}'?/u", $str, $matches);

RegEx Demo

【讨论】:

    【解决方案2】:

    使用!防止分裂

    $characters = preg_split("/(?!')/u", $word, -1, PREG_SPLIT_NO_EMPTY);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多