正则表达式php(正则表达式)

时间:2015-08-09 06:09:22

标签: 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>';

请帮助我。谢谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

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
)

RegEx Demo

RegEx分手:

.+?                        # 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