2015-02-06 21 views
0

我目前有这样如何在字符串中提取或preg_replace汉字?

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

我想要做的是刚刚发生爆炸,从这些字符串的所有中国和字母数字串什么的清单。 我怎么能代替所有特殊字符,如,/"和空间与-_

然后提取与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); 

但似乎没有奏效...

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

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

首先就应及时更换成

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

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

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

您的预期产出是?你想用'-'替换'\ n'吗? – 2015-02-06 02:34:08

+0

你最终的目标是什么?为什么你需要替换字符? – Alex 2015-02-06 02:37:28

+0

,而不是用'-'替代,你可以直接根据'[^ \ p {L} \ p {N} \ n] +'正则表达式来分割输入。 – 2015-02-06 02:45:32

回答

0

好像你想是这样的,

$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匹配一个换行符。
  • 通过将所有内置否定字符类将做相反的操作。
+0

非常感谢您的回答。但是还有一件事,是不是可以在字母数字字符(比如G,F,A,B,9,000)之间替换'/'和','? – user3571945 2015-02-06 02:58:06

+0

@ user3571945你可以问这是一个新问题...... – 2015-02-06 03:13:12

+0

'\ B,\ B'将不匹配中间的字母数字字符之间的逗号。 https://regex101.com/r/eG7cI3/1 – 2015-02-06 03:18:26