正则表达式查找以特定单词开头和结尾的子字符串

时间:2014-07-05 06:58:21

标签: php regex

我在段落中多次跟踪字符串,我想在页面上显示

START_num_360_250_END

此处num可以是任意数字的任何数字,此字符串可以是段落中的任何位置,也可以是任意次数。并且num可以在该字符串中重复(即重复的字符串)。我希望这些字符串一次一个。

我正在关注。

for($i=1;$i<=$file_count;$i++){
    preg_match( '/START_'.$i.'(.*)_END/', $p_info['blog_content'], $match);
    print_r($match);
}

例如。如果我在我的段落中有两次该字符串,如下所示 START_1_360_250_END START_2_360_250_END

我应该在START_1_360_250_END中获得for loop第一次迭代(因为num这里是1),即使该字符串出现任何次数,我也应该只获得一次。而START_2_360_250_END作为num进行第二次迭代,2

但这就是我得到的。

Array ( 
  [0] => START_1_360_250_END<p><br></p><p>START_2_360_250_END 
  [1] => _360_250_END<p><br></p><p>START_2_360_250 
) 
Array ( [0] => START_2_360_250_END [1] => _360_250 ) 
Array ( ) 
Array ( ) 
Array ( ) 
Array ( ) 
Array ( )
Array ( )
Array ( )

1 个答案:

答案 0 :(得分:0)

您正在使用贪婪的匹配(.*),该匹配将始终尝试匹配尽可能多的字符(导致匹配显示两个条目)。

让它成为非贪婪的匹配(.*?)。这将尝试匹配尽可能少的字符。

如果您想使其更加强大,请将.替换为更具体的类\w,这类将匹配字母数字字符以及_(其中应该适合你的情况。)