Php 检查字符串是否以某些单词开头,如果是,则将其拆分 $str='fooo';//

Php 检查字符串是否以某些单词开头,如果是,则将其拆分 $str='fooo';//,php,regex,arrays,string,Php,Regex,Arrays,String,尝试: 此解决方案遍历$words数组,并检查$str是否以任何单词开头。如果找到匹配项,则将$str减少到$w并中断 Array ( [0] => foo [1] => oo ) 使用示例中的$words和$str: foreach ($words as $w) { if ($w == substr($str, 0, strlen($w))) { $str=$w; break; } } 结果: $pie

尝试:


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

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

使用示例中的
$words
$str

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

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

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

谢谢!你知道我怎么能做同样的事,但反过来吗?我的意思是检查字符串是否以words@Alex,如果删除
^
(行标记的开头)并在最后一个
/
之前将其替换为
$
(行标记的结尾):
'/('.introde('|',$words.))$/'
foreach ($words as $w) {
     if ($w == substr($str, 0, strlen($w))) {
          $str=$w;
          break;
     }
}
$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"
}
string[] MaybeSplitString(string[] searchArray, string predicate)
{
  foreach(string str in searchArray)
  {
    if(predicate.StartsWith(str)
       return new string[] {str, predicate.Replace(str, "")};
  }
  return predicate;
}