【问题标题】:PHP exploding a string while keeping delimitersPHP在保留分隔符的同时爆炸字符串
【发布时间】:2013-05-25 11:41:08
【问题描述】:

对于我的项目,我需要分析不同的句子并通过确定它们是否以问号结尾来确定哪些是问题。

所以我尝试使用explode,但它不支持多个分隔符。我暂时将所有标点符号替换为 chr(1),以便我可以分解所有句子,无论它们以 (., !, ?, etc...) 结尾。

然后我需要找到每个句子的最后一个字母,但是爆炸功能已经删除了所有的标点符号,所以我需要一些方法把它放回那里。

我花了很长时间才解决这个问题,但最终我破解了它。我在这里发布我的解决方案,以便其他人可以使用它。

【问题讨论】:

    标签: php string explode delimiter


    【解决方案1】:
    $array = preg_split('~([.!?:;])~u',$raw , null, PREG_SPLIT_DELIM_CAPTURE);
    

    【讨论】:

      【解决方案2】:

      这是我的函数,multipleExplodeKeepDelimiters。以及如何使用它的示例,通过将字符串分解为不同的句子并查看最后一个字符是否是问号:

      function multipleExplodeKeepDelimiters($delimiters, $string) {
          $initialArray = explode(chr(1), str_replace($delimiters, chr(1), $string));
          $finalArray = array();
          foreach($initialArray as $item) {
              if(strlen($item) > 0) array_push($finalArray, $item . $string[strpos($string, $item) + strlen($item)]);
          }
          return $finalArray;
      }
      
      $punctuation = array(".", ";", ":", "?", "!");
      $string = "I am not a question. How was your day? Thank you, very nice. Why are you asking?";
      
      $sentences = multipleExplodeKeepDelimiters($punctuation, $string);
      foreach($sentences as $question) {
          if($question[strlen($question)-1] == "?") {
              print("'" . $question . "' is a question<br />");
          }
      }
      

      【讨论】:

      • 我必须说,这一定是我见过的最奇怪的示例字符串。
      • 记住我见过的 SOH CAH TOA 的最佳方式!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 2011-12-10
      • 1970-01-01
      相关资源
      最近更新 更多