2016-04-26 9 views
-3

Как игнорировать abc и def, 01 в выражении ниже, используя регулярное выражение. Я пробовал игнорировать меня, это не работает.Как построить это регулярное выражение?

Abc-DEF-SMDP-01

+1

Пожалуйста, прочтите [Как создать Minimal, полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). Затем вернитесь и соответствующим образом отредактируйте свой вопрос. – Jan

ответ

1

Один путь, чтобы разбить исходную строку в префикс части интерес, и суффикс, удаление нежелательных charcters в аффиксах после этого:

$raw = "abc-def-smdp-01"; 

preg_match ("/^(.*)(-smdp-)(.*)$/", $raw, $matches); // separate original string into prefix, trunk, suffix 
$matches[1] = preg_replace ("/[^-]/", "", $matches[1]); // non-'-' characters deleted in prefix 
$matches[3] = preg_replace ("/[^-]/", "", $matches[3]); // non-'-' characters deleted in suffixfix 
$result = $matches[1].$matches[2].$matches[3]; // composing target string 

echo $result; 

Демо-версия онлайн here.

NB

Проблемы, подобные этому можно легко решать со знанием функции PHP библиотеки, чьи doc within the online php manual поставляется с EXAKT синтаксиса, примеры кода и комментариями пользователей.

В этом случае обратите внимание на:

Конечно, найти подходящих кандидатов для предполагаемой функциональности предполагает по меньшей мере, небрежное понимание имеющихся средств, что делает 15 минут просмотра hierarchical index разумная инвестиция времени

+0

вы можете мне сказать это с помощью Regex не в PHP – chethan

+0

Какова ваша среда программирования? И почему вы помечаете свой вопрос 'preg_match', если это не php? – collapsar

+0

Уточнение моего предыдущего комментария: Pure regexen используются для _match text patterns_ - однако вы также хотите _modify_ найти, который требует знания того, какая среда программирования используется. – collapsar

0

Я хотел бы использовать эту модель:

preg_match("/\w+\-\w+\-(\w+)\-\d+/", "Abc-def-smdp-01", $output); 
Echo $output[1]; 

http://www.phpliveregex.com/p/ftB

EDIT: или вы нуждаетесь в тире?
В этом случае вы должны использовать этот шаблон: "/\w+(\-)\w+(\-)(\w+)(\-)\d+/"
А потом выводить его как:
echo $output[1].$output[2].$output[3].$output[4];
или петли его и построить строку с .=

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