2016-06-28 6 views
1

Я хочу написать regex для извлечения чисел из нижеследующего текста (который является частью большого текста):Регулярного выражения для этого текста

switchport trunk allowed vlan 206,220,23,234,250,262,21,283,2086,296,305,323 
switchport trunk allowed vlan add 334,340,342,365,380,404,41,414,42,421,434 
switchport trunk allowed vlan add 461,472,499,509,29,535,544,551,552,55,595 
switchport trunk allowed vlan add 642,672,690,697,701,704,711,800,2018,2020 
switchport trunk allowed vlan add 2054 
switchport mode trunk 

Я хочу, чтобы извлечь все ВЛС числа между стволом порта коммутатору позволили ВЛС и магистральный режим

порта коммутатора

Я думаю, что картина должна быть как:

switchport trunk allowed vlan (\S*) ((\d+),*)+(?:.|\n) 

, но не знают, как извлечь другие номера (только первый один соответствует)

Я использую шаблон в PHP в preg_match функции.

+1

Я думаю, что вы хотите: - https://eval.in/596968 –

+1

Или может быть это: - https://eval.in/596974 –

+0

Пожалуйста вверх голосовать ответ тоже, если это еще не сделано .благодаря. –

ответ

1

Чтобы извлечь все номера, так что вы можете сделать это следующим образом: -

<?php 
$str = ' switchport trunk allowed vlan 206,220,23,234,250,262,21,283,2086,296,305,323 
switchport trunk allowed vlan add 334,340,342,365,380,404,41,414,42,421,434 
switchport trunk allowed vlan add 461,472,499,509,29,535,544,551,552,55,595 
switchport trunk allowed vlan add 642,672,690,697,701,704,711,800,2018,2020 
switchport trunk allowed vlan add 2054 
switchport mode trunk'; // original string 
preg_match_all('!\d+!', $str, $matches); // check for all digits and make array $matches 
print_r($matches); // print digits array 
echo implode(',',$matches[0]); // convert digits array into comma separated string of numbers 
?> 

Выход: - https://eval.in/596968 ИЛИ https://eval.in/596974

Примечание: - это будет работать на одной линии , многострочные абзацы (если ваши полные данные находятся в одной переменной).

1

Это будет печатать каждое соответствие, массив $ matches [0] имеет все значения.

$str=' switchport trunk allowed vlan 206,220,23,234,250,262,21,283,2086,296,305,323 
switchport trunk allowed vlan add 334,340,342,365,380,404,41,414,42,421,434 
switchport trunk allowed vlan add 461,472,499,509,29,535,544,551,552,55,595 
switchport trunk allowed vlan add 642,672,690,697,701,704,711,800,2018,2020 
switchport trunk allowed vlan add 2054 
switchport mode trunk'; 

preg_match_all("/([0-9])\w+/", $str, $matches); 
foreach ($matches[0] as $val) { 
    echo $val.'<br>'; 
} 
+0

Вы тоже правы + 10 с моей стороны. –

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