【发布时间】:2017-10-08 03:09:51
【问题描述】:
我需要一种方法,根据标点符号或空格的存在将字符串分成几个不同的部分。
我的意思是,每个单词都应该被分割成自己的数组元素,而且单词开头或结尾的标点符号也应该放在自己的数组元素中数组元素。
例如:
我需要能够将字符串Hello, Harry Potter. I'm Tom Riddle. 变成
array(
"Hello",
", "
"Harry",
"Potter"
". ",
"I'm",
"Tom",
"Riddle",
". "
)
因此单词中间的标点符号(例如单词中间的撇号)不应造成分隔
**编辑:**为了澄清所需的行为,I'm、didn't 等应保留一个单词,但hello!、"okay, 等应与开头或结尾的标点符号分开。
另外,我想在搜索中包含的标点符号是:
- 。 (句号/句号)
- ? (问号)
- ! (感叹号)
- ,(逗号)
- ; (分号)
- :(冒号)
- (-)(连字符-破折号)
- ((开始括号)
- )(结束括号)
- {(开始花括号)
- }(结束波浪形大括号)
- [(开始方括号)
- ](结束方括号)
- '(单引号)
- "(双引号)
- …(省略号)
我找到的最接近我需要的结果是这样的:
preg_split('/(\s|[\.,\/])/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
但是,这样做的问题是:
- 标点中间词算作正常标点
- 包含数组元素的数组元素也不包含空格。 编辑:抱歉含糊不清;通过这个,我的意思是我希望标点符号包含在标点符号之后/之前的空格。例如如果是逗号,则为
,(后面有空格),但如果是左括号,则为((前面有空格)。 - 当我添加我需要的其余标点符号 (
preg_split("/(\s|[\.?!,;:-(){}[]'\"…\/])/",) 时出现错误。我很确定这个错误是由于一个未转义的字符造成的,所以我通过preg_quote运行了整个事情,它返回了\.\?\!,;\:\-\(\)\{\}\[\]'"…,但这仍然给出了错误:Parse error: syntax error, unexpected '…' (T_STRING), expecting ',' or ')' in [...][...] on line 5
我对正则表达式的理解相当有限,但是在查看 php 文档后,我可以收集到上面的代码在遇到的每个空格处或每次遇到逗号或标点符号时都会分隔单词。 (如果我错了,请纠正我?)据我所知,在方括号内添加其余字符也会使其在任何这些字符处分隔字符串(?)因为这不起作用,我假设我对它的工作原理有某种基本的误解,因此将不胜感激。
【问题讨论】: