代码之家  ›  专栏  ›  技术社区  ›  ABDALRAHMAN MOLOOD

php regex preg\u仅匹配金额

  •  1
  • ABDALRAHMAN MOLOOD  · 技术社区  · 2 年前

    你好,世界

    我对正则表达式有一些问题,我想得到字符串的一些部分

    示例1:这里我想获得金额“1234.0”和日期“2021 6月21日”以及mb编号“20010598278”

    21-Jun-2021 Bank Fees - Funds Transfer - MB #20010598278 ,Transfer ref.250922020633209684 Transferref.250333020633209684 1234.0 143,956.43
    

    示例2:这里我想得到金额“4444.0”,日期“2022年6月25日”,以及mb编号“20010598278”

    25-Jun-2022 Funds Transfer - MB # 20010598278,Transferref.250922020633209684 Transferref.250922020633209684 4444.0 143,966.43
    

    完整文本为

    25-Jun-2022 Bankak Fees - Funds Transfer - MB #20010598278 ,Transfer ref.250922020633209684 Transferref.250922020633209684 10.0 143,956.43 25-Jun-2022 Funds Transfer - MB # 20010598278,Transferref.250922020633209684 Transferref.250922020633209684 4000.0 143,966.43 24-Jun-2022 Bankak Fees - BP #20278550446 , Transferref.#Bashaer 897906 Transfer ref.#Bashaer 897906 10.0 147,966.43 24-Jun-2022 BP # 20278550446,Transfer ref.#Bashaer 897906Transfer ref.#Bashaer 897906 20000.0 147,976.43 23-Jun-2022 Bankak Fees - -Zain #20277797569 , Transfer ref.#ZainBill 900946824 Transfer ref.#Zain Bill 900946824 10.0 167,976.43 23-Jun-2022 -Zain # 20277797569,Transfer ref.#Zain Bill 900946824Transfer ref.#Zain Bill 900946824 86700.0 167,986.43 23-Jun-2022 Funds Transfer - MB # 20010564267,Transferref.235022180616750305 Transferref.235022180616750305 10000.0 254,686.43 23-Jun-2022 Bankak Fees - Funds Transfer - MB #20010563561 ,Transfer ref.23302218068730100006 Transferref.23302218068730100006 10.0 244,686.43 23-Jun-2022 Funds Transfer - MB # 20010563561,Transferref.23302218068730100006 Transferref.23302218068730100006 3325.0 244,696.43 23-Jun-2022 Bankak Fees - Funds Transfer - MB #20010563116 ,Transfer ref.232022180646120606 Transferref.232022180646120606 10.0 248,021.43 23-Jun-2022 Funds Transfer - MB # 20010563116,Transferref.232022180646120606 Transferref.232022180646120606 6652.0 248,031.43 23-Jun-2022 Funds Transfer - MB # 20001957673,Transferref.23312214061431100031 Transferref.23312214061431100031 41200.0 254,683.43 22-Jun-2022 Bankak Fees - Funds Transfer - MB #20010530021 ,Transfer ref.225322200629053100005 Transferref.225322200629053100005 10.0 213,483.43 22-Jun-2022 Funds Transfer - MB # 20010530021,Transferref.225322200629053100005 Transferref.225322200629053100005 50000.0 213,493.43 22-Jun-2022 Funds Transfer - MB # 20001728503,Transferref.22232216065923296 Transferref.22232216065923296 248000.0 263,493.43 21-Jun-2022 Bankak Fees - Funds Transfer - MB #20010480587 ,Transfer ref.211622150699216100013 Transferref.211622150699216100013 10.0 15,493.43 21-Jun-2022 Funds Transfer - MB # 20010480587,Transferref.211622150699216100013 Transferref.211622150699216100013 50000.0 15,503.43 21-Jun-2022 Funds Transfer - MB # 20003484214,Transferref.211322150645513576 Transferref.211322150645513576 7000.0 65,503.43
    

    我只想要每个部分的图案

    我在用php,你知道吗?

    1 回复  |  直到 2 年前
        1
  •  2
  •   Tim Biegeleisen    2 年前

    我们可以使用 preg_match_all 以及适当的正则表达式模式:

    $input = "21-Jun-2021 Bank Fees - Funds Transfer - MB #20010598278 ,Transfer ref.250922020633209684 Transferref.250333020633209684 1234.0 143,956.43";
    preg_match_all("/(\d{1,2}-\w{3}-\d{4}) .*? MB #(\d+).*? (\d+(?:\.\d+)?) \d{1,3}(?:,\d{3})*(?:\.\d+)?\b/", $input, $matches);
    echo $matches[1][0] . "\n";
    echo $matches[2][0] . "\n";
    echo $matches[3][0];
    

    此打印:

    21-Jun-2021
    20010598278
    1234.0