Regex 可以获取包含一些文本的标记的正则表达式

Regex 可以获取包含一些文本的标记的正则表达式,regex,Regex,以下是我的例子: <w:p> <w:pPr> <w:spacing></w:spacing> <w:contextualSpacing/> <w:rPr/> </w:pPr> <w:r> <w:rPr> <w:color/> <w:rtl w:val="0"/> </w:rPr>

以下是我的例子:

<w:p>
<w:pPr>
    <w:spacing></w:spacing>
    <w:contextualSpacing/>
    <w:rPr/>
</w:pPr>
<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl w:val="0"/>
    </w:rPr>
    <w:t>Some text</w:t>
</w:r>

<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl/>
    </w:rPr>
    <w:t>My search text</w:t>
</w:r>

<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl/>
    </w:rPr>
    <w:t>Other text</w:t>
</w:r>

一些文本
我的搜索文本
其他文本

我需要用正则表达式得到这个块:

<w:r>
    <w:rPr>
        <w:color/>
        <w:rtl/>
    </w:rPr>
    <w:t>My search text</w:t>
</w:r>

我的搜索文本
但是我的正则表达式总是得到第一个
和最后一个
。懒惰的量词没有帮助

那么,如何仅在“我的搜索文本”中获取
块呢


下面是示例

这里是修复示例的步骤

<w:r>.+My search text.+<\/w:r>
之前插入一个负前瞻
(?!)
,以防止下一个匹配的字符成为不需要的序列的开始

(?:(?!)+我的搜索文本(?:(?!))+

你想做什么?它是怎么失败的?为什么要使用正则表达式而不是XML解析器?这是我的示例。关于XML解析器,解析此XML(这是DOCX格式的XML)非常困难,因此我认为使用regex会更容易+我只需要找到block并用另一个替换它为什么不搜索
我的搜索文本
,上下文相关吗?如果是,请将其添加到表达式中。
<w:r>(?:.)+My search text(?:.)+<\/w:r>
<w:r>(?:(?!<w:r>|<\/w:r>).)+My search text(?:(?!<w:r>|<\/w:r>).)+<\/w:r>