即使在字符串中这些单词不止一次,也将字符串从指定单词转到另一个单词



用这样的字符串:

$sentence='StartDetails text 1 EndDetails StartDetails text 2 EndDetails  StartDetails text 3 EndDetails StartDetails text 4 EndDetails';

即使在字符串上出现n个次数,我如何在 StartDetailsEndDetails单词之间获得文本?

假设您的字符串始终具有相同的结构:在循环中使用Explode((是一个可能的选择:

$sentence='StartDetails text 1 EndDetails StartDetails text 2 EndDetails  StartDetails text 3 EndDetails StartDetails text 4 EndDetails';
$a = explode("StartDetails", $sentence);
foreach($a as $k=>$v){
    if(!empty($v)){
        $b[] = explode( "EndDetails", $v)[0];
    }
}
print_r($b);
// output
Array
(
    [0] =>  text 1 
    [1] =>  text 2 
    [2] =>  text 3 
    [3] =>  text 4 
)

正则表达式应有所帮助,尝试以下操作:

$sentence='StartDetails text 1 EndDetails StartDetails text 2 EndDetails  StartDetails text 3 EndDetails StartDetails text 4 EndDetails';
preg_match_all('/StartDetails(.*)EndDetails/U', $sentence, $outputArray);
print_r($outputArray);

$outputArray中,第二个元素应该是StartDetails和EndDetails之间所有可能文本的数组。

这里要注意的关键是使用U修饰符,这使得匹配贪婪和preg_match_all功能,而不仅仅是preg_match,它匹配所有匹配所有出现

编辑

由于我们不需要匹配startdetails或enddetails,所以我更改了此

preg_match_all('/(StartDetails)(.*)(EndDetails)/U', $sentence, $outputArray);

to

preg_match_all('/StartDetails(.*)EndDetails/U', $sentence, $outputArray);

尝试此正则 (?<=StartDetailss).*?(?=s+EndDetails)。它与StartDetailsEndDetails之间的所有内容匹配。REGEX使用LookAhead和LookBehind模式匹配多个值。

然后在php。

中使用preg_match_all

您可以使用array_walkexplode

$senteanceToArray = array_filter(explode('StartDetails',$sentence));
array_walk($senteanceToArray, function(&$v, $k){
 return $v = trim(str_replace('EndDetails', '', $v));
});
echo '<pre>';
print_r($senteanceToArray);

您还可以使用str_replace

$sentence='StartDetails text 1 EndDetails StartDetails text 2 EndDetails  StartDetails text 3 EndDetails StartDetails text 4 EndDetails';
$patterns = ['StartDetails','EndDetails'];
$replacements = ['','#'];
$words = array_map('trim', array_filter(explode("#",str_replace($patterns, $replacements, $sentence))));

结果: -

Array
(
 [0] => text 1
 [1] => text 2
 [2] => text 3
 [3] => text 4
)

最新更新