需要2组字符之间的php正则表达式

问题描述:

我需要一个php的正则表达式,输出<!--:en--><!--:-->之间的所有内容。 因此对于<!--:en-->STRING<!--:-->它只会输出STRING需要2组字符之间的php正则表达式

编辑:噢,下面<!--:--> nedds是<!--:en-->后的第一个becouse有更多的文字..

+5

到目前为止,您尝试过哪些方法?您卡在哪里?向我们展示您的代码 - 我们将指出需要更改的内容。 –

+0

我没有得到任何代码,因为我吸吮正则表达式:) – Milivoj

+0

要添加代码,只需选择文本并单击图标与父母或ctrl + k在Windows上,我已经解决了这个问题 –

你想要的其实并不是太复杂:

/<!--:en-->(.*?)<!--:-->/gi 

你的比赛将在捕获组1

说明:

.*?是一个懒惰的量词。基本上,它意味着“保持匹配,直到找到仍然适合此模式的最短字符串”。这将导致匹配在第一个实例<!--:-->处停止,而不是直到文档中的最后一个<!--:-->

如果我正确记得我的PHP,那么用法就像preg_match("/<!--:en-->(.*?)<!--:-->/gi", $input)

如果你只是输入

$input = '<!--:en-->STRING<!--:-->'; 

您可以

尝试
$output = strip_tags($input); 
+0

是啊,那不会工作,我得到和,所以它会将它们全部剥离... – Milivoj

尝试:

^< !--:en-- >(.*)< !--:-- >$ 

我不认为任何其他角色需要转义。

+0

试图,但没有结束分隔符'^'错误 – Milivoj

+1

OP没有指定该字符串是整行;实际上他特别指出在投入中有不止一种这样的模式。你的模式在至少三种方式上是错误的:要求整个字符串匹配,需要标签内的空格,并使用贪婪的'。*'作为一个匹配消耗到最后一个结束标记的所有路径,即使没有'^$'。 –

<!--:en--\b[^>]*>(.*?)<!--:--> 

这将匹配你的标签之间的事。这将打破,如果你嵌套你的标签,但你没有说你这样做,是:)

+0

试过,但得到一个未知的修饰符']'错误 – Milivoj

+0

这是行不通的。首先,在'-'之后没有单词边界,除非紧跟着一个单词字符(匹配'\ w +';其次,在第二个标签中有一个额外的'/',在要求中没有'/' –

+0

删除了额外的正斜杠,只是用于html标签,它适用于html标签之间的所有文本,它应该可以很好地搜索这些标签。 – Jim