2015-08-09 3 views
2

У меня есть переменная, которая содержит несколько дат в формате (01AUG), может быть любой другой датой.регулярное выражение php (regex)

Теперь мне нужно разделить переменную, используя формат даты, указанный выше. Эта переменная содержит несколько таких форматов с разными датами. Пожалуйста, расскажите мне, как я могу разделить эту строку по дате, используя php.I думаю, что регулярное выражение - это только то, как мы может решить эту проблему.

$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>'; 

Пожалуйста, помогите мне с this.Thanks заранее за вашу помощь

+0

Вот почему мы имеем preg_match_all .'preg_match_all ('/ \ Ь (\ d d \) (AZ) {3} \ Ь /', $ v, $ матч); ' –

+0

Каков ваш ожидаемый результат? – anubhava

+0

Спасибо Avinash Raj. Но я попробовал это, но он дает массив внутри массива. Почему это, пожалуйста, попробуйте его на стороне ура и верните мне, если вы могли бы получить результат –

ответ

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 
+0

Спасибо anubhava, ваше решение почти сработало в живом регулярном выражении, но в моем коде этот массив показан при копировании вашего массива Array ([0] => 04 [1] => 37 [2] => 07 [3 ] => 07 [4] => 08 [5] => 46 [6] => 07 [7] => 05 [8] =>). ) В чем проблема, пожалуйста, объясните –

+0

Можете ли вы показать свой код, отредактировав свой вопрос ИЛИ иначе покажите входные данные, которые вы используете. – anubhava

+0

Да, я добавил строку ввода и код, который я использую –

Смежные вопросы