2016-02-01 30 views
1

是否有可能让php爆炸工作在一个确切的单词?例如,我要拆分的字符串:php在一个确切的词爆炸

London Luton to Paris 

然而,PHP的爆炸会发现“到”第一次出现是在“卢顿”。此字符串也是可能的:

Paris to London Luton 

哪个会正确爆炸,因为'to'首先出现。

理想情况下,我希望爆炸是不区分大小写,我相信目前爆炸是。不过,我认为RegEx可能是更好的方式。

+2

“但我认为RegEx可能是更好的选择。”正确 – PeeHaa

+3

是否有任何东西阻止你在爆炸函数中包含'to'前后的空格?像'explode('to',$ string)'。 – frz3993

+0

甚至可以添加frz3993评论:你可以在“to”之前和之后始终连接一个空格 –

回答

4

preg_split简单的解决方案:

$words = preg_split("/\bto\b/iu", "London Luton to Paris"); 
var_dump($words); 

// the output: 
array (size=2) 
    0 => string 'London Luton ' (length=13) 
    1 => string ' Paris' (length=6) 
+0

只是一个内联修饰符的替代方法:['〜(?i)\ bto \ b(?i-)'](https://regex101.com/r/wI3lR4/1) - 然而+1 :-) – Jan

+0

@ Jan,是的,在更复杂的情况下,内联修饰符可以提供很好的灵活性 – RomanPerekhrest

0

如果你想使用'to'作为分隔符,那么你可以使用字符串代替' to '(这是to两边各有一个空格)爆炸。这种方式只有当to是一个完整的词它被视为一个分隔符时,to字母组合的大字不匹配。

但是,如果您需要不区分大小写,regex可能是更好的解决方案。

preg_split('/\bto\b/i', 'London Luton to Paris'); 

分割使用to作为分隔符,但只有当它是一个完整的词(即围绕着它仅匹配单词边界\b)的字符串。

i修饰符告诉regex引擎忽略该情况。

to分隔符旁边的空格将以您获得的作品返回。您可以trim()所有导致串

array_map('trim', preg_split('/\bto\b/i', 'Paris to London Luton'); 

,或者你可以将它们添加到regex

preg_split('/\s*\bto\b\s*/i', 'Paris to London Luton'); 

\s*部分空格字符(\s)零次或多次(*)相匹配。通过这种方式,字to被识别为分隔符,即使它显示为字符串中的第一个或最后一个单词以及围绕它的空格。