通过字的punctionation分手字符串

分裂一个字符串,我来了......

<php preg_match_all('/(\w)|(,.!?;)/', "I'm a little teapot, short and stout.", $matches); print_r($matches[0]);

我认为这将每个字(\ W)和指定的标点符号(。!?)分开。 例如: ["I'm", "a", "little", "teapot", ",", "short", "and", "stout", "."]

相反,我得到:

Array ( [0] => I [1] => m [2] => a [3] => l [4] => i [5] => t [6] => t [7] => l [8] => e [9] => t [10] => e [11] => a [12] => p [13] => o

等等...

我在做什么错在这里?

提前致谢。

--------------解决方案-------------

你有两个缺点:

  1. \w匹配只有一个字符。 您想在匹配多个\w+ 。 此外\w匹配字母数字字符。 如果你想匹配其他人物像'你需要将它们包括: [\w']
  2. (,.!?;)相匹配的字符序列,.!?; 。 相反,你想用匹配任何字符[,.!?;]

正确的正则表达式是:

'/[\w\']+|[,.!?;]/'

如果你想成为更宽容的,你应该使用Unicode字符,而不是类(允许字母,数字,组合标记,破折号和词和标点符号标点撇号):

'/[\pL\pN\pM\pPd\']+|\pP/u'

试试这个 - 当然它的工作原理,只要你想:

([\w]+)|[,.!?;]+

也想与大家分享一个非常有用的服务 - 在线正则表达式测试仪

你可能想尝试这样的:

/([^,.!?; ]+)|(,.!?;)/

分类:php 时间:2012-02-27 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.289 (s). 9 q(s)