如何提取或 preg_replace 字符串中的汉字?

How can I extract or preg_replace chinese characters in a string?

我目前有一个这样的字符串列表

蘋果,香蕉,橙。
榴蓮, 啤梨
鳳爪,排骨,雞排
24個男,2個女,30個老人

我想做的就是从这些字符串中分解出所有中文和字母数字字符。 如何用 -_[=29 替换所有特殊字符,如 , / " 和空格=]

然后提取所有带有 explode() 的汉字,例如 $str = explode("-",$str);$str = explode("_",$str); ?

我目前有这样的正则表达式

 if(/^\S[\u0391-\uFFE5 \w]+\S$/.test(value)).....

然后我修改成

 $str = preg_replace("/^\S[\x{0391}-\x{FFE5} \w]+\s+\S$/u", "-", $str);

但是好像没用...

在线示例:https://www.regex101.com/r/qR8aA6/1

编辑:我的预期输出(第一次刺痛):

首先应该替换成

蘋果-香蕉-橙-蘋果_香蕉_橙_

然后我可以用$str = explode("-",$str);让他们最终变成:

Array
    (
     [0] => 蘋果
     [1] => 香蕉
     [2] => 橙
     )

看来你想要这样的东西,

$txt = <<<EOT
蘋果,香蕉,橙。
榴蓮, 啤梨
鳳爪,排骨,雞排
24個男,2個女,30個老人
EOT;
echo preg_replace('~[^\p{L}\p{N}\n]+~u', '-', $txt);

输出:

蘋果-香蕉-橙-
榴蓮-啤梨
鳳爪-排骨-雞排
24個男-2個女-30個老人

DEMO

解释:

  • \p{L} 匹配来自任何语言的任何类型的字母。
  • \p{N} 匹配任何脚本中的任何类型的数字字符。
  • \n 匹配换行符。
  • 通过将 all 放入否定字符 class 将执行相反的操作。