drxvjnx58751 2017-02-07 08:14
浏览 9
已采纳

正则表达式在一场比赛中获得所有比赛

I'm searching for a regex that matches all words, but will give only one match.

What I have:


Regex: (.*\={1})\d+(\D*)

Input: max. Money (EU)=600000 Euro

Output: Euro


This works fine, but it's possible that the Input is like this: max. Money (EU)=600000 Euro plus 20000 for one person.

Before the = could be anything, the only thing that I know is that the = is fixed. So every input have this.

So I'm searching for a regex that will give me for this input this output: Euro plus for one person.

I tried to use a regex like (\D+), but I'll get for this input 3 matches. Does someone know how to get all occurences in one match?

  • 写回答

1条回答 默认 最新

  • doulu8847 2017-02-07 08:26
    关注

    One cannot match discontinuous text with 1 match operation.

    The easiest workaround is to capture the whole substring after = + number, and then remove numbers from the match with preg_replace('~\s*\d+~', '', $m[1]).

    See the PHP demo:

    $re = '/=\d+\s*(.*)/';
    $str = 'max. Money (EU)=600000 Euro plus 20000 for one person';
    $res = '';
    if (preg_match($re, $str, $m)) {
        $res = preg_replace('~\s*\d+~', '', $m[1]);
    }
    echo $res; // => Euro plus for one person
    

    Since you mention that a = does not have to be followed by 1+ digits, you may really just explode the string at the first = and then remove digits in the second item:

    $chunks = explode("=", $str, 2);
    if (count($chunks) == 2) {
        $res = preg_replace('~\s*\d+~', '', $chunks[1]);
    }
    

    See this PHP demo.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号