非贪婪的比赛不起作用

时间:2016-12-21 15:56:44

标签: php regex

我想使用.*?模式实现非贪婪的匹配。但是,我遇到了一个示例字符串,显示非贪婪的匹配不起作用。这是代码和示例字符串:

preg_match_all('/\<w:t.*?\>\<w:p\>/', '<w:t xml:space="preserve"></w:t></w:r><w:r><w:rPr><w:b/></w:rPr><w:t xml:space="preserve">Text 1 </w:t></w:r><w:r><w:rPr><w:b/><w:u w:val="single"/><w:color w:val="ff0000"/></w:rPr><w:t xml:space="preserve"></w:t></w:r><w:r><w:rPr><w:b/><w:u w:val="single"/><w:color w:val="ff0000"/><w:i/></w:rPr><w:t xml:space="preserve">Text 2</w:t></w:r><w:r><w:t xml:space="preserve"></w:t></w:r><w:r><w:t xml:space="preserve"></w:t></w:r><w:r><w:t xml:space="preserve"></w:t></w:r></w:p></w:t></w:r></w:p><w:p w:rsidRDefault="004D3323" w:rsidP="003F03B1"><w:r><w:t><w:p>', $match);

但如果我print_r $match变量,我看到这个模式匹配整个字符串。但是,我想要的只是匹配如下字符串:

"<w:t><w:p>" and "<w:t any text may go here><w:p>"

那么,我做错了什么以及如何解决?谢谢!

1 个答案:

答案 0 :(得分:2)

请改用此正则表达式:

<w:t[^>]*><w:p>

[^>]*允许除>

以外的所有字符

请参阅https://regex101.com/r/nuMzTk/1