繁体   English   中英

正则表达式php(regex)

[英]regular expression php(regex)

我有一个包含格式为(01AUG)的多个日期的变量,可以是任何其他日期。

现在我需要使用上面给出的日期格式拆分变量。此变量包含多个具有不同日期的格式。请告诉我如何使用php按日期拆分此字符串。我认为正则表达式只是解决此问题的方法。

$var= '01AUG 14:35:27 4026208273880857 521314795212 795212 400088 0200 010000 901 02 14 5,000.00 NPR 0.00 CA ID: 0178SBLN 1001013 22/Kakarvitta /NP 0000 FPI: 886 DG CD: NA ACI: N FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM DECLINE 0.300000CR 04 01AUG 11:42:01 4117733926341924 521311789579 789579 411773 0200 012000 901 02 00 10,400.00 NPR 101.79CR CA ID: 0182SBLN 1001010 25/Lazimpat /NP 0000 FPI: 885 TR ID: 465213429879918 ACI: E SCHG: 400.00 FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -U.S.A. FEE LEVEL: ATM-TIER II AF 0.646805CR 37 02AUG 03:48:19 4539796662883201 521403809409 809409 400088 0200 010000 901 02 05 6,000.00 NPR 0.00 CA ID: 0471SBLN 1001010 25/Thamel Lounge /NP 0000 FPI: 886 DG CD: NA ACI: N FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM DECLINE 0.300000CR 07 01AUG 12:52:12 4547030014539661 521312792592 792592 400088 0200 013000 901 02 57 25,000.00 NPR 0.00 CA ID: 0173SBLN 1001028 25/Boudha /NP 0000 FPI: 886 DG CD: NA ACI: N FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM DECLINE 0.300000CR 07 01AUG 12:57:37 4571652018388487 521312792812 792812 400088 0200 012000 901 02 00 25,000.00 NPR 244.68CR CA ID: 0173SBLN 1001028 25/Boudha /NP 0000 FPI: 886 TR ID: 385213475230796 ACI: E VC: P6RC FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM-TIER II 1.500000CR 08 01AUG 13:20:50 4580030725494543 521313793593 793593 400088 0200 010000 901 02 00 10,000.00 NPR 97.87CR CA ID: 0471SBLN 1001010 25/Thamel Lounge /NP 0000 FPI: 886 TR ID: 305213489171412 ACI: E VC: V7QR FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM-TIER II 1.500000CR 46 02AUG 08:37:38 4595000092328247 521408828378 828378 400088 0200 012000 901 02 00 1,000.00 NPR 9.79CR CA ID: 0171SBLN 1001010 25/Roadhouse Thamel /NP 0000 FPI: 886 TR ID: 385214319247297 ACI: E VC: ZC5V FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM-TIER II 1.500000CR 07 01AUG 12:50:09 4599228000108437 521312792507 792507 400088 0200 012000 901 02 00 10,000.00 NPR 97.87CR CA ID: 0471SBLN 1001010 25/Thamel Lounge /NP 0000 FPI: 886 TR ID: 585213470757658 ACI: E VC: 2V7Z FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM-TIER II 1.500000CR 05 01AUG 12:10:26 4751170038590711 521312790835 790835 400088 0200 010000 901 02 05 6,000.00 NPR 0.00 CA ID: 0300SBLN 1001043 25/Baniyatar /NP 0000 FPI: 886 DG CD: NA ACI: N FEE JURIS: VISA INTERNATIONAL ROUTING: 1 A.P. -E.U. FEE LEVEL: ATM DECLINE 0.300000CR';

我已经使用了preg_split来使用这种模式

preg_match_all('/.+?\s*(?=\b\d{2}[A-Z]{3}\b\s|$)/', $var, $match);
       echo '<pre>';
       print_r($match[0]);
       echo '</pre>';

请帮助我。谢谢您的帮助

您可以使用以下基于前瞻的正则表达式:

preg_match_all('/.+?\s*(?=\b\d{2}[A-Z]{3}\b\s|$)/', $var, $match);

// check output
print_r($match[0]);
Array
(
    [0] => 01AUG 14:35:27 4026208273880857 521314795212 795212 400088 0200 010000 901 02 14 5,000.00 NPR 0.00 -E.U. FEE LEVEL: ATM DECLINE 0.300000CR 04
    [1] => 05JAN 11:42:01 4117733926341924 521311789579 789579 411773 0200 012000 901 02 00 10,400.00 NPR 101.79CR I 0.646805CR 37
    [2] => 02AUG 03:48:19 4539796662883201 521403809409 809409 400088 0200
)

正则演示

正则表达式分解:

.+?                        # match 1 or more of any character (non-greedy)
\s*                        # match 0 or more spaces
(?=...)                    # a positive lookahead
(?=\b\d{2}[A-Z]{3}\b\s|$)  # match must be followed by a word boundary + 2 digits +
                           # 3 uppercase letters + word boundary OR line end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM