【问题标题】:php regex to get middle of stringphp正则表达式获取字符串中间
【发布时间】:2014-08-05 08:37:24
【问题描述】:

我将 html 页面解析为纯文本,以便查找并获取数值。 在整个html混乱中,我需要找到一个像这样的字符串:

C) Debiti33.197.431,90I - Di finanziamento

我需要数字 33.197.431,90(这个数字会随着每个 html 解析请求而改变。

是否有任何正则表达式来实现这一点?例如:

STARTS WITH 'C) Debiti' ENDS WITH 'I - Di finanziamento' GETS the middle string that can be whatever.

每当我尝试时,我都会得到空结果...对正则表达式了解不多。 你能帮我么? 非常感谢。

【问题讨论】:

    标签: php regex web-scraping


    【解决方案1】:

    你可以试试下面的正则表达式,

    ^C\) Debiti\K.*?(?=I - Di finanziamento$)
    

    DEMO

    PHP 代码是,

    <?php
    $mystring = "C) Debiti33.197.431,90I - Di finanziamento";
    $regex = '~^C\) Debiti\K.*?(?=I - Di finanziamento$)~';
    if (preg_match($regex, $mystring, $m)) {
        $yourmatch = $m[0]; 
        echo $yourmatch;
        }
    ?> //=> 33.197.431,90
    

    【讨论】:

    • 谢谢。使用您的正则表达式,我得到了字符串的开头和结尾,但不是我要查找的数字。我错过了什么?
    • 它对我有用。见上面的代码。您可以将上述代码复制并粘贴到一个文件中,然后运行它。
    • 谢谢!我设法在你的代码之前让它工作,但无论如何,再次感谢你。仍未解决的是为什么如果字符串只是“C)Debiti33.197.431,90I - Di finanziamento”,它可以完美运行,但是如果我在包含该字符串的长网页中进行整个搜索,我会得到一个白色页面(无结果)。
    • 如果C) Debiti33.197.431,90I 出现在页面中间,那么它将不起作用,因为我们已经在原始模式中给出了开始和结束模式。
    • 哦……那是个坏消息。我可以从整个 html 中提取字符串“C) Debiti33.197.431,90I - Di finanziamento”,不是吗?也许删除所有内容是在“C) Debiti”之前和“I - Di finanziamento”之后。问题是......如何:(
    【解决方案2】:

    这应该可行。阅读部分Want to Be Lazy? Think Twice.

    (?<=\bC\) Debiti)[\d.,]+(?=I - Di finanziamento\b)
    

    这里是demo

    示例代码:

    $re = "/(?<=\\bC\\) Debiti)[\\d.,]+(?=I - Di finanziamento\\b)/i";
    $str = "C) Debiti33.197.431,90I - Di finanziamento";
    
    preg_match($re, $str, $matches);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      相关资源
      最近更新 更多