Регулярное выражение для соответствия переносов слов

Как я могу извлечь переносимые строки из этой строки?

ADW-CFS-WE CI SLA Def Нет SLANAME CI Max Outage Service

Я просто хочу извлечь из него «ADW-CFS-WE», но за последние несколько часов он очень не увенчался успехом. Я застрял в этом простом regEx "(. *)", В результате чего вся строка изложена о выбранном.

Solutions Collecting From Web of "Регулярное выражение для соответствия переносов слов"

Вы, вероятно, можете использовать:

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" }