【问题标题】:Check if a string starts with certain words, and split it if it is检查字符串是否以某些单词开头,如果是则将其拆分
【发布时间】:2011-09-10 06:24:04
【问题描述】:
$str = 'foooo'; // <- true; how can I get 'foo' + 'oo' ?
$words = array(  
  'foo',
  'oo'
);

如果$str 以数组中的一个单词开头,如果是的话,我能找到的最快方法是什么?

【问题讨论】:

    标签: php regex arrays string


    【解决方案1】:

    试试:

    <?php
    function helper($str, $words) {
        foreach ($words as $word) {
            if (substr($str, 0, strlen($word)) == $word) {
                return array(
                    $word,
                    substr($str, strlen($word))
                );
            }
        }
    
        return null;
    }
    
    $words = array(  
      'foo',
      'moo',
      'whatever',
    );
    
    $str = 'foooo';
    
    print_r(helper($str, $words));
    

    输出

    Array
    (
        [0] => foo
        [1] => oo
    )
    

    【讨论】:

      【解决方案2】:

      此解决方案遍历 $words 数组并检查 $str 是否以其中的任何单词开头。如果找到匹配项,则将$str 减少为$w 并中断。

      foreach ($words as $w) {
           if ($w == substr($str, 0, strlen($w))) {
                $str=$w;
                break;
           }
      }
      

      【讨论】:

        【解决方案3】:

        在您的示例中使用 $words$str

        $pieces = preg_split('/^('.implode('|', $words).')/', 
                     $str, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
        

        结果:

        array(2) {
          [0]=>
          string(3) "foo"
          [1]=>
          string(2) "oo"
        }
        

        【讨论】:

        • 谢谢!你知道我怎么能做同样的事情,但反过来吗?我的意思是检查字符串是否以单词之一结尾
        • @Alex,如果您删除^(行标记的开头)并在最后的/之前用$(行标记的结尾)替换它应该可以工作:@987654328 @
        【解决方案4】:
        string[] MaybeSplitString(string[] searchArray, string predicate)
        {
          foreach(string str in searchArray)
          {
            if(predicate.StartsWith(str)
               return new string[] {str, predicate.Replace(str, "")};
          }
          return predicate;
        }
        

        这需要从 C# 翻译成 PHP,但这应该为您指明正确的方向。

        【讨论】:

          猜你喜欢
          • 2010-12-18
          • 1970-01-01
          • 1970-01-01
          • 2013-03-09
          • 2015-03-14
          • 2018-12-27
          • 1970-01-01
          • 2012-02-06
          相关资源
          最近更新 更多