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

时间:2019-05-02 14:42:32

标签: php

使用这样的字符串:

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

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

4 个答案:

答案 0 :(得分:1)

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

$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);

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

答案 1 :(得分:1)

假设您的String始终具有相同的结构: 可以在循环中使用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 
)

答案 2 :(得分:0)

尝试使用此正则表达式(?<=StartDetails\s).*?(?=\s+EndDetails)。它匹配StartDetailsEndDetails之间的所有内容。正则表达式使用Lookahead和Lookbehind模式来匹配多个值。

然后在PHP中使用preg_match_all

答案 3 :(得分:0)

您可以使用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
)