为了分割一个字符串,我想出了......
<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
等...
我在这里做错了什么?
提前致谢。
答案 0 :(得分:3)
你有两个错误:
\w
只匹配一个字符。您希望按\w+
匹配多个。此外,\w
仅匹配字母数字字符。如果您想匹配其他字符,例如'
,则需要包含它们:[\w']
。(,.!?;)
匹配字符序列,.!?;
。相反,您希望使用[,.!?;]
匹配任何这些字符。正确的正则表达式是:
'/[\w\']+|[,.!?;]/'
如果你想更宽容,你应该使用unicode字符类(允许字母,数字,组合标记,短划线字符和撇号用于标点符号和标点符号):
'/[\pL\pN\pM\pPd\']+|\pP/u'
答案 1 :(得分:1)
答案 2 :(得分:1)
您可能想要尝试以下内容:
/([^,.!?; ]+)|(,.!?;)/