Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 - Fatal编程技术网

Php 非常喜欢正则表达式

Php 非常喜欢正则表达式,php,regex,Php,Regex,在字符串中: <ut Type="start" Style="external" RightEdge="angle" DisplayText="P id=&quot;2&quot;">&lt;tr&gt;&lt;td width="10%" bgcolor="#C0C0C0" valign="top"&gt;&lt;p align="right"&gt;2&lt;/td&gt;&lt;td wid

在字符串中:

<ut Type="start" Style="external" RightEdge="angle" DisplayText="P id=&quot;2&quot;">&lt;tr&gt;&lt;td width="10%" bgcolor="#C0C0C0" valign="top"&gt;&lt;p align="right"&gt;2&lt;/td&gt;&lt;td width="90%"&gt;</ut><Tu MatchPercent="100"><Tuv Lang="EN-US"><ut Type="start" RightEdge="angle" DisplayText="csf style=&quot;Italic CH&quot; italic=&quot;on&quot;">&lt;!-- 1 --&gt;&lt;FONT COLOR="#FF0000"&gt;&amp;lt;csf style=&quot;Italic CH&quot; italic=&quot;on&quot;&amp;gt;&lt;/FONT&gt;</ut>Battlefield™ V<ut Type="end" LeftEdge="angle" DisplayText="1">&lt;!-- 1 --&gt;&lt;FONT COLOR="#FF0000"&gt;&amp;lt;/1&amp;gt;&lt;/FONT&gt;</ut> (Xbox One)</Tuv><Tuv Lang="NL-NL"><ut Type="start" RightEdge="angle" DisplayText="csf style=&quot;Italic CH&quot; italic=&quot;on&quot;">&lt;!-- 1 --&gt;&lt;FONT COLOR="#FF0000"&gt;&amp;lt;csf style=&quot;Italic CH&quot; italic=&quot;on&quot;&amp;gt;&lt;/FONT&gt;</ut>Battlefield™ V<ut Type="end" LeftEdge="angle" DisplayText="1">&lt;!-- 1 --&gt;&lt;FONT COLOR="#FF0000"&gt;&amp;lt;/1&amp;gt;&lt;/FONT&gt;</ut> (Xbox One)</Tuv></Tu><ut Type="end" Style="external" LeftEdge="angle" DisplayText="P">&lt;/td&gt;&lt;/tr&gt;</ut>`
然而,这是行不通的

这里我们有一个类似的情况:

$postproc = preg_replace('#(DisplayText="|\G(?!\A))([^">]*)"(?!\s*>)#', '$1$2&quot;', $postproc);
这将用
$quot;
替换DisplayText标记中的所有“引号”。主要区别在于DisplayText标记以一个字符(“)结尾,而上面的字体标记以一系列多个字符结尾,因此我需要一个负数前瞻,而不是简单的
[^”>]
否定

我真的试过了。准确地说是八个小时。我被卡住了

$postproc用于包含各种标记的整个文件,其中包括上述多个字体和显示文本标记,每个标记可以包含多个替换项。

您可以使用


更妙的是:这个字符串从哪里来?你能操纵它的来源吗?而且,上面提到的答案对嵌套的
FONT
“标记”不起作用。

不过这是可行的

$postproc = preg_replace('#(?:\G(?!\A)|&lt;FONT)(?:(?!FONT).)+?\K(?<!&amp;)&quot;#', '$1$2&amp;quot;', $postproc);

$postproc=preg_replace('#)(?:\G(?!\A)| FONT)(?:(?!FONT.)+?\K(?)非常感谢。问题是,这也不起作用。你可以看看你是否在我现在要添加到原始问题的新文本上尝试它。你的代码还获取DisplayText=“blablablablabla”中的""部分,但那些需要保持原样。要处理的代码无法更改:它来自我的客户端仍在使用的非常旧的软件,我无法更改其输出。停止使用正则表达式解析HTML,您将有一个更愉快的时间。相信我。我希望我可以。不幸的是,没有办法解决这一问题,主要是因为这是全部采用PHP不再支持的非常旧的Unicode。
(?:\G(?!\A)|FONT)
(?:(?!FONT).)+?\K
(?<!&amp;)&quot;
(?:\G(?!\A)|FONT) # match FONT or at the end of the last match
(?:(?!FONT).)+?\K # match everything that comes lazily
                  # do not overrun FONT, forget what has been matched
                  # thus far (\K)
(?<!&amp;)&quot;  # match &quot; only when it is not preceeded by &amp;
$postproc = preg_replace('#(?:\G(?!\A)|&lt;FONT)(?:(?!FONT).)+?\K(?<!&amp;)&quot;#', '$1$2&amp;quot;', $postproc);