【问题标题】:regex - match empty space between any of characters正则表达式 - 匹配任何字符之间的空格
【发布时间】:2017-09-25 03:18:46
【问题描述】:

在 PHP 中,将字符串视为不可变是一种常见的做法。有时需要“就地”修改字符串。

我们采用额外的数组创建方法。

这个数组应该包含源字符串中的每一个字母。

在 PHP (str_split) 中有一个函数。一个问题,它不能很好地处理多字节编码。

还有一个 mb_split 函数,它将正则表达式作为分隔符序列的输入参数。所以

mb_split('.', '123') 

返回 ['', '', '', '']。

但是:

mb_split('', '123') 

返回 ['123']。

所以我相信有一个对应的正则表达式可以匹配多字节字符序列的任何变体之间的空格。

所以对于 '123' 它应该匹配

'1~2', '2~3' 

其中 ~ 是一个实际的匹配项。这就像 \b 但对于任何事情。

是否有正则表达式黑客可以这样做?

【问题讨论】:

  • 你有什么需要什么?这听起来像是一个 XY 问题。
  • 我正在做一项工作,我应该为一组准备通过编码面试的学生展示最简单的代码。问题是就地字符串反转。需要使用 PHP 语言进行解决方案演示。为了促进最佳编码实践,我们决定使用常用的方法将 PHP 字符串计算为不可变。所以我们无权使用字符串字符访问器作为语言特性。我们从该字符串创建一个数组并对其进行处理,通过交换元素然后组合成一个结果字符串来反转它。我们不能使用复杂的解决方案。
  • 如果它至少适用于 UTF-8,那已经是一个近乎完美的解决方案了。
  • [^\u0000-\uFFFF] - 不走运
  • 试试preg_match_all('~\X~u', $s, $arr) - $arr[0] 必须包含所有字符。见ideone.com/RCvvl4。

标签: php regex


【解决方案1】:

使用

preg_match_all('~\X~u', $s, $arr)

$arr[0] 将包含所有字符。 \X 模式 matches any Unicode grapheme。 /u 修饰符是使正则表达式引擎将输入字符串视为 Unicode 字符串并使模式识别 Unicode 所必需的。

请参阅PHP demo。

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2017-08-02
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多