php preg_split与正则表达式,需要一个技巧?

时间:2013-01-24 18:54:43

标签: php regex preg-split

这是我的字符串:

$myString = "first second third,el forth, fiveeee, six";

我想要捕获的是:

first
second
third
el forth
fiveeee
six

这是我尝试在preg_split中使用正则表达式:

 $myPattern = "[\s,]";

问题在于它分别捕获“el”和“forth”......

我怎样才能把这个骗到el?

编辑:

我不清楚.. 我想将el作为单个数组元素捕获..因为EL太短了......我认为它只是一个单词。像:

EL CLASSICO,SOMETHING DIFFERENT,SOMETHINGELSEHERE SOMEMORETEXT应该是:

* `EL CLASSICO`
* `SOMETHING DIFFERENT`
* `SOMETHINGELSEHERE`
* `SOMEMORETEXT`

它们应该用空格或逗号分隔,但如果有EL或LE之类的东西,则应该忽略它们。

3 个答案:

答案 0 :(得分:2)

问题编辑后

不是很好的解决方案,忽略

str_replace( ',' , ' ' , $myString)最后str_replace( ' ', ' ' , $myString)以避免双倍空格或:

preg_replace( '@, ?' , ' ' , $myString)

答案 1 :(得分:1)

<?php
$myString = "first second third,el forth,del fiveeee,six,six seven,four six";
$myPattern = "/\s*,\s*|(?<=[^\s,]{4})[\s,]+/";

print_r(preg_split($myPattern, $myString));
?>

产生

[0] => first
[1] => second
[2] => third
[3] => el forth
[4] => del fiveeee
[5] => six
[6] => six seven
[7] => four
[8] => six

(?<=[^\s,]{4})positive look-behind assertion。只有在前面有四个非分隔符(但它与字符本身不匹配,它只检查它们是否存在)时才会成功。如果前一个单词太短,这样就不会分裂。 但如果分隔符包含逗号,它将始终分裂 - 这就是\s*,\s*|的用途。

答案 2 :(得分:0)

implode(' ', preg_split('/,\s*/', $myString));