Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我需要匹配组中的所有字符,只要它们不';与某个词不匹配_Php_Regex_Preg Replace - Fatal编程技术网

Php 我需要匹配组中的所有字符,只要它们不';与某个词不匹配

Php 我需要匹配组中的所有字符,只要它们不';与某个词不匹配,php,regex,preg-replace,Php,Regex,Preg Replace,我不确定这是否是一个简单的问题,但到目前为止我还没有找到答案。我正在尝试编写一个正则表达式,用于分离.docx文件并将所有标记替换为标记,因为标记在转换为html时似乎无法正确保留选项卡。我在PHP中工作,到目前为止,我还没有成功地编写一个正则表达式来完成我需要它正确完成的任务 问题是,我不能在这里运行简单的查找和替换函数。我必须移除标签,并将标签插入最近的打开和关闭标签中 示例XML字符串如下所示: <w:p w14:paraId="2679030C" w14:textId="4

我不确定这是否是一个简单的问题,但到目前为止我还没有找到答案。我正在尝试编写一个正则表达式,用于分离.docx文件并将所有
标记替换为
标记,因为
标记在转换为html时似乎无法正确保留选项卡。我在PHP中工作,到目前为止,我还没有成功地编写一个正则表达式来完成我需要它正确完成的任务

问题是,我不能在这里运行简单的查找和替换函数。我必须移除
标签,并将
标签插入最近的打开和关闭
标签中

示例XML字符串如下所示:

    <w:p w14:paraId="2679030C" w14:textId="4E6FFA99" w:rsidR="00ED4314" w:rsidRPr="00254747" w:rsidRDefault="00ED4314" w:rsidP="00322270">
        <w:pPr>
            <w:pStyle w:val="NoSpacing" />
            <w:spacing w:line="480" w:lineRule="auto" />
            <w:jc w:val="both" />
            <w:rPr>
                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" />
                <w:sz w:val="24" />
                <w:szCs w:val="24" />
            </w:rPr>
        </w:pPr>
        <w:r w:rsidRPr="00254747">
            <w:rPr>
                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" />
                <w:sz w:val="24" />
                <w:szCs w:val="24" />
            </w:rPr>
            <w:tab />
            <w:t>SOME text</w:t>
        </w:r>
        <w:r w:rsidR="0003297C">
            <w:rPr>
                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" />
                <w:sz w:val="24" />
                <w:szCs w:val="24" />
            </w:rPr>
            <w:t>SOME more text</w:t>
        </w:r>
        <w:r w:rsidRPr="00254747">
            <w:rPr>
                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" />
                <w:sz w:val="24" />
                <w:szCs w:val="24" />
            </w:rPr>
            <w:t>EVEN more text</w:t>
        </w:r>
    </w:p>

一些文本
更多的文字
更多文本
因此,
的每个实例都需要删除,然后我需要追溯到前面的
标记,并在其中插入一个
标记

以下是我到目前为止的情况:

$content = preg_replace("/<w:rPr>(.*?)<\/w:rPr>(.*?)<w:tab\/>/", "<w:rPr><w:ind w:firstLine=\"720\"/>$1</w:rPr>$2", $content);
$content=preg_replace(“/(*?)(*?/”、“$1$2”、$content);

这样做是可行的,但问题是我认为搜索太全球化了。即使我指定它不是贪婪的,但它返回给我的结果比它们应该得到的内容要多。有人能提出一个优化的方法吗?提前谢谢

我认为你把不贪婪和正则表达式混淆了,正则表达式“知道”在找到更多它不能找到的标记之前停止。如果您想禁止
之间的标记,那么这应该大致可行:

/<w:rPr>(.*?)<\/w:rPr>([^<]*?)<w:tab\/>/
                       ^^^^

/(.*)([^我认为您将不贪婪与正则表达式“知道”在找到更多无法找到的标记之前停止混淆。如果您想禁止
之间的标记,那么这应该大致可行:

/<w:rPr>(.*?)<\/w:rPr>([^<]*?)<w:tab\/>/
                       ^^^^

/(.*)([^您可能想查看XML解析器。您可能想查看XML解析器。这是一个很好的答案!!!不幸的是,它并不能完全解决我的问题。标记和标记之间可能有几个XML标记。因此,我需要更像这样的东西:/(.*)([^]*?)/。但是,这并不是我所需要的方式。有没有其他方法可以做到这一点?你是一个真正的正则表达式大师!在我写这篇文章之前,我研究了前瞻和后顾断言,但我无法从中获得足够的理据来编写我自己的代码。你的解释和示例比我所有的教程都更有意义下面是。谢谢你这么清楚!我真的很感激!@FredGarbutt-很高兴能帮忙;愉快的编码!这是一个很好的答案!!!不幸的是,它并不能完全解决我的问题。标记和标记之间可能有几个xml标记。因此,我需要类似以下内容的东西:/(*)([^]*?)/。但是,这并不是我所需要的方式。有没有其他方法可以做到这一点?你是一个真正的正则表达式大师!在我写这篇文章之前,我研究了前瞻和后顾断言,但我无法从中获得足够的理据来编写我自己的代码。你的解释和示例比我所有的教程都更有意义下面是。谢谢你这么清楚!我真的很感激!@FredGarbutt-很高兴能帮忙;很高兴编码!