编程语言
首页 > 编程语言> > php – 匹配模式并使用preg_match_all排除子串

php – 匹配模式并使用preg_match_all排除子串

作者:互联网

我需要找到START和END之间的所有字符串,包括匹配字符串中的PADDING子字符串.我发现的最好方法是

$r="stuffSTARTthisPADDINGisENDstuffstuffSTARTwhatPADDINGIwantPADDINGtoPADDINGfindENDstuff" ;
preg_match_all('/START(.*?)END/',str_replace('PADDING','',$r),$m);
print(join($m[1]));
> thisiswhatIwanttofind

我想用尽可能最小的代码大小来做这个:只有preg_match_all和没有str_replace的更短,最终直接返回没有连接数组的字符串?我试过一些环视表达式,但我找不到合适的表达式.

解决方法:

$r="stuffSTARTthisPADDINGisENDstuffstuffSTARTwhatPADDINGIwantPADDINGtoPADDINGfindENDstuff";
echo preg_replace('/(END.*?START|PADDING|^[^S]*START|END.*$)/', '', $r);

这应该使用单个正则表达式模式返回给你这个Iwanttofind

说明:-

END.*?START  # Replace occurrences of END to START
PADDING      # Replace PADDING
^[^S]*START  # Replace any character until the first START (inclusive)
END.*$      # Replace the last END and until end of the string

标签:php,regex,regex-lookarounds,preg-match-all
来源: https://codeday.me/bug/20190709/1410532.html