Php 查找所有字符,直到找到给定字符串的第一个匹配项,然后继续使用preg_match_all获取其余字符 $HTML='1!' 内容放在这里1独立内容放在这里2独立内容放在这里3独立 内容放在这里4endenden '; preg_match_all('%([\S\S]+)endendendend%',$HTML,$matches);

Php 查找所有字符,直到找到给定字符串的第一个匹配项,然后继续使用preg_match_all获取其余字符 $HTML='1!' 内容放在这里1独立内容放在这里2独立内容放在这里3独立 内容放在这里4endenden '; preg_match_all('%([\S\S]+)endendendend%',$HTML,$matches);,php,regex,Php,Regex,我想让它在匹配中找到“CONTENT GOES HERE 1”、“CONTENT GOES HERE 2”、“CONTENT GOES HERE 3”、“CONTENT GOES HERE 4” 顺便说一下,我必须使用\s\s,因为我需要匹配所有类型的字符,包括特殊字符、新行、制表符,但我希望它在找到Endendend并获得其他结果时停止 我该怎么做?因为它只在Endendend的最后一次出现时停止,我希望它在找到的第一次出现时停止。所以它可以和其他的相匹配 我该怎么做?我试了这么多,但什么都没

我想让它在匹配中找到“CONTENT GOES HERE 1”、“CONTENT GOES HERE 2”、“CONTENT GOES HERE 3”、“CONTENT GOES HERE 4”

顺便说一下,我必须使用\s\s,因为我需要匹配所有类型的字符,包括特殊字符、新行、制表符,但我希望它在找到Endendend并获得其他结果时停止

我该怎么做?因为它只在Endendend的最后一次出现时停止,我希望它在找到的第一次出现时停止。所以它可以和其他的相匹配

我该怎么做?我试了这么多,但什么都没有。
非常感谢。

不,您不必为此使用
\s\s
。而
+
量词可能是这里的第二个问题

如果您没有忘记
/s
标志,正常的
*?
就可以了。

在您的例子中,
[^]*?
可能更好,因为您不想匹配标记分隔符。

我没有php环境,但重点是express,不是吗?请参见grep测试:

$HTML = '

<div class="tsts">CONTENT GOES HERE 1ENDENDENDENDEND<div class="tsts">CONTENT GOES HERE 2ENDENDENDENDEND <div class="tsts">CONTENT GOES HERE 3ENDENDENDENDEND
<div class="tsts">CONTENT GOES HERE 4ENDENDENDENDEND

';

preg_match_all('%<div class="tsts">([\S\s]+)ENDENDENDENDEND%',$HTML,$matches);
kent$echo“'
内容放在这里1独立内容放在这里2独立内容放在这里3独立
内容放在这里4endenden
'; 

“| grep-Po”(?这正是我需要的。:)我必须记住使用“前瞻”,谢谢。
kent$  echo "'

<div class="tsts">CONTENT GOES HERE 1ENDENDENDENDEND<div class="tsts">CONTENT GOES HERE 2ENDENDENDENDEND <div class="tsts">CONTENT GOES HERE 3ENDENDENDENDEND
<div class="tsts">CONTENT GOES HERE 4ENDENDENDENDEND

'; 

"|grep -Po "(?<=<div class="tsts">)([\s\S]*?)(?=ENDENDENDENDEND)"     

CONTENT GOES HERE 1
CONTENT GOES HERE 2
CONTENT GOES HERE 3
CONTENT GOES HERE 4