PHP 在找到子字符串之前提取两个字符串之间的子字符串

PHP extract a substring between two strings before a substring found

提问人:Jenemj 提问时间:9/8/2023 最后编辑:Jenemj 更新时间:9/8/2023 访问量:36

问:

我有这个转义的html代码字符串:

$html="
...
euro�<strong>0,00</strong>�sono relativi a Operazioni finanziarie di <strong>Importo Ridotto</strong>;<br/>
                                        euro�<strong>0,00</strong>�sono relativi a Operazioni finanziarie di <strong>Rischio Tripartito</strong>;<br/>
                                        euro�<strong>25.000,00</strong>�sono relativi a Operazioni finanziarie ai sensi del <strong>Dl Liquidita' 08/04/2020 art.13 lettera m)</strong>;<br/>
...";

如果子字符串之后匹配了“”和“”之间的值(“Operazioni finanziarie”,“Rischio Tripartito”... 基本上,如果我找到子字符串,我需要从该位置反向提取两个子字符串之间的值。<strong&gt</strong>

我想使用类似的东西:

$stringBefore=strstr($html,$stringToFind,true);

然后找到字符串“between”的边界,$stringBefore有两个具有负偏移量的 strpo。

php 反向 字符串匹配

评论


答:

0赞 user2342558 9/8/2023 #1

您可以使用此正则表达式来获取该值:

\<strong>(.+?)\<(?:\/strong>).+(?:Operazioni finanziarie|Rischio Tripartito|etc)

<?php
$html="
...
euro�&lt;strong&gt;0,00&lt;/strong&gt;�sono relativi a Operazioni finanziarie di &lt;strong&gt;Importo Ridotto&lt;/strong&gt;;&lt;br/&gt;
                                        euro�&lt;strong&gt;0,00&lt;/strong&gt;�sono relativi a Operazioni finanziarie di &lt;strong&gt;Rischio Tripartito&lt;/strong&gt;;&lt;br/&gt;
                                        euro�&lt;strong&gt;25.000,00&lt;/strong&gt;�sono relativi a Operazioni finanziarie ai sensi del &lt;strong&gt;Dl Liquidita' 08/04/2020 art.13 lettera m)&lt;/strong&gt;;&lt;br/&gt;
...";
preg_match_all("/\&lt;strong&gt;(.+?)\&lt;(?:\/strong&gt;).+(Operazioni finanziarie|Rischio Tripartito|etc)/", $html, $matches);
print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => &lt;strong&gt;0,00&lt;/strong&gt;�sono relativi a Operazioni finanziarie
            [1] => &lt;strong&gt;0,00&lt;/strong&gt;�sono relativi a Operazioni finanziarie di &lt;strong&gt;Rischio Tripartito
            [2] => &lt;strong&gt;25.000,00&lt;/strong&gt;�sono relativi a Operazioni finanziarie
        )

    [1] => Array
        (
            [0] => 0,00
            [1] => 0,00
            [2] => 25.000,00
        )

    [2] => Array
        (
            [0] => Operazioni finanziarie
            [1] => Rischio Tripartito
            [2] => Operazioni finanziarie
        )

)