如何在字符串中提取或preg_replace中文字符?

时间:2015-02-06 02:33:12

标签: php regex preg-replace

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

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

我想要做的只是从这些字符串中分解所有中文和字母数字字符。 如何替换所有特殊字符,例如 , / "和空格-_

然后使用explode()$str = explode("-",$str);$str = explode("_",$str);提取所有中文字符?

我目前有一个像这样的RegEx

 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] => 橙
     )

1 个答案:

答案 0 :(得分:1)

好像你想要这样的东西,

$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匹配换行符。
  • 将所有内容置于否定的字符类中将执行相反的操作。