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

时间:2019-02-08 21:19:39

标签: php preg-match-all

请帮我解决preg_match,我不知道:(

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

示例

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

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

结果应为:ineed.thistext AND:test.thistext

很多人在此先感谢:)

哦,我尝试过使用它;

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

,但不适用于多个'&'

W

1 个答案:

答案 0 :(得分:1)

您的模式包含[^\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 )