如何获取标签之间包含特定字符串的文本

How do I get text containing a certain string between tags

请帮我解决preg_match,我想不通:(

我有很多文本,但我需要捕获“&”之间包含特定文本的所有内容。

示例

"thisip4:isatextexample&ineed.thistext&TXT:&andthis.idontneed&txt:&test.thistext&"

我需要提取包含此文本的&之间的完整文本

结果应该是:ineed.thistext 和:test.thistext

非常非常感谢 :)

哦,我试过用这个;

&([^\n]*thistext[^\n]*)&

但这不适用于多个“&”

W

您的模式包含 [^\n]* 匹配除换行符以外的任何 0+ 个字符,这使得正则表达式引擎贪婪地匹配任何 & 个字符并找到最后一个 &行。

您可以使用

'~&([^&]*?thistext[^&]*)&~'

然后,获取第 1 组值。见 regex demo.

详情

  • & - 一个 & 字符
  • ([^&]*?thistext[^&]*) - 捕获组 1:
    • [^&]*? - & 以外的任何 0+ 个字符,尽可能少
    • thistext - 文字
    • [^&]* - & 以外的任何 0+ 个字符,尽可能多
  • & - 一个 & 字符

PHP demo:

$str = 'thisip4:isatextexample&ineed.thistext&TXT:&andthis.idontneed&txt:&test.thistext&';
if (preg_match_all('~&([^&]*?thistext[^&]*)&~', $str, $m)) {
    print_r($m[1]);
}
// => Array ( [0] => ineed.thistext [1] => test.thistext )