【问题标题】:php Explode on an Exact Wordphp 在一个确切的词上爆炸
【发布时间】:2016-05-10 09:27:16
【问题描述】:

是否可以让 php 对一个确切的词进行分解?比如我想拆分字符串:

London Luton to Paris

然而,php explode 会在 'Luton' 中找到第一次出现的 'to'。这个字符串也是可以的:

Paris to London Luton

当“to”首先出现时,哪个会正确爆炸。

理想情况下,我希望爆炸不区分大小写,我认为爆炸目前是。然而,我认为 RegEx 可能是一个更好的方法。

【问题讨论】:

  • “我认为 RegEx 可能是一个更好的方法。”正确
  • 有什么阻止你在explode函数中包含to前后的空格吗?喜欢explode(' to ',$string)
  • 甚至在 frz3993 上添加评论:您始终可以在前后连接一个空格并在 ' to ' 上爆炸
  • 但是如果你想要不区分大小写,最好使用正则表达式。

标签: php regex explode


【解决方案1】:

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)

【讨论】:

  • 只是内联修饰符的替代方案:~(?i)\bto\b(?i-) - 尽管如此 +1 :-)
  • @Jan,是的,在更复杂的情况下,内联修饰符可以提供很好的灵活性
【解决方案2】:

如果您想使用'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 出现在字符串中的第一个或最后一个单词以及围绕它的空格,它也会被识别为分隔符。

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 2014-12-15
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2013-02-13
    • 2013-12-15
    相关资源
    最近更新 更多