Как я могу извлечь переносимые строки из этой строки?
ADW-CFS-WE CI SLA Def Нет SLANAME CI Max Outage Service
Я просто хочу извлечь из него «ADW-CFS-WE», но за последние несколько часов он очень не увенчался успехом. Я застрял в этом простом regEx "(. *)", В результате чего вся строка изложена о выбранном.
Вы, вероятно, можете использовать:
preg_match("/\w+(-\w+)+/", ...)
\w+
будет соответствовать любому количеству буквенно-цифровых символов (= одно слово). А вторая группа ( )
– любое дополнительное число дефис с буквами.
Трюк с регулярными выражениями часто специфичен. Использование .*
Часто будет слишком много.
$input = "ADW-CFS-WE XY CI SLA Def No SLANAME CI Max Outage Service"; preg_match_all('/[AZ]+-[AZ-]+/', $input, $matches); foreach ($matches[0] as $m) { echo $matches . "\n"; }
Обратите внимание, что в этих решениях допускается совпадение только верхнего регистра AZ. Если это не так, вставьте правильный класс символов. Например, если вы хотите разрешить произвольные буквы (например, a и Ä), замените [AZ]
на \p{L}
.
Просто поймите все свободные свободные слова [^ \ s], по крайней мере, с помощью «-».
Это сделает следующее выражение:
<?php $z = "ADW-CFS-WE CI SLA Def No SLANAME CI Max Outage Service"; $r = preg_match('#([^\s]*-[^\s]*)#', $z, $matches); var_dump($matches);
Следующий шаблон предполагает, что данные находятся в начале строки, содержит только заглавные буквы и может содержать дефис перед каждой группой из одной или нескольких букв:
<?php $str = 'ADW-CFS-WE CI SLA Def No SLANAME CI Max Outage Service'; if (preg_match('/^(?:-?[AZ]+)+/', $str, $matches) !== false) var_dump($matches);
Результат:
array(1) { [0]=> string(10) "ADW-CFS-WE" }