编辑:好的,我无法阅读,感谢Col. Shrapnel的帮助。如果有人来这里寻找同样的事情要回答......
print_r(preg_split('/([\!|\?|\.|\!\?])/', $string, null, PREG_SPLIT_DELIM_CAPTURE));
有没有办法在一组分隔符上拆分字符串,并在分割后保留分隔符的位置和字符?
例如,使用!
?
.
!?
的分隔符来转换:
$string = 'Hello. A question? How strange! Maybe even surreal!? Who knows.';
进入这个
array('Hello', '.', 'A question', '?', 'How strange', '!', 'Maybe even surreal', '!?', 'Who knows', '.');
目前我正在尝试使用print_r(preg_split('/([\!|\?|\.|\!\?])/', $string));
将分隔符捕获为子模式,但我没有太多运气。
答案 0 :(得分:0)
只需将PREG_SPLIT_DELIM_CAPTURE添加到preg_split函数:
$str = 'Hello. A question? How strange!';
$var = preg_split('/([!?.])/', $str, 0, PREG_SPLIT_DELIM_CAPTURE);
$var = array(
0 => "Hello",
1 => ".",
2 => " A question",
3 => "?",
4 => " How strange",
5 => "!",
6 => "",
);
答案 1 :(得分:0)
你的评论听起来像是你找到了相关的标志,但是你的正则表达式有点偏,所以无论如何我都会添加它:
preg_split('/(!\?|[!?.])/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
请注意,这将在第一个字符串之后的每个字符串的开头留下空格,因此您可能也希望在trim()
之后全部运行它们。
结果:
$string = 'Hello. A question? How strange! Maybe even surreal!? Who knows.';
print_r(preg_split('/(!\?|[!?.])/', $string, null, PREG_SPLIT_DELIM_CAPTURE));
Array
(
[0] => Hello
[1] => .
[2] => A question
[3] => ?
[4] => How strange
[5] => !
[6] => Maybe even surreal
[7] => !?
[8] => Who knows
[9] => .
[10] =>
)
答案 2 :(得分:0)
您还可以在.
,!
,?
或!?
之后拆分空格。但是只有在你能保证在这样的角色之后有空格的情况下才能使用它。
你可以通过匹配但正面回顾来实现这一点:
(<=\.|!?|?|!)
:这会使正则表达式
'/(?<=\.|\?|!) /'
然后,你必须检查匹配的字符串是否以!?
结束:如果是,则将最后两个字符串子串。如果没有,你必须对最后一个字符进行子串。