2015-02-11 2 views
1

Я хочу совместить только такие слова, как «abcunit», «hedhdunit», «ewedfunit» и попадать в массив из текстового файла с использованием регулярного выражения. Может ли кто-нибудь рассказать, как я могу получить только это слово в очереди. Так что я использую /(....unit)/g, но charcters до «unit» меняются. Может ли кто-нибудь рассказать идеальное регулярное выражение для этого. Любая помощь будет оценена.Perl Regex match

блок: abcunit

блок: hedhdunit

блок: ewedfunit

единица: eedunit

+1

Каков ваш ввод и ожидаемый выход? –

+0

Привет, Avinash, Мой ожидаемый вывод - это abcunit, hedhdunit ewedfunit eedunit - строка за строкой в ​​массиве. –

+0

Каковы ваши данные на самом деле? – hwnd

ответ

1

Вы можете попробовать следующее регулярное выражение:

\b[a-z]+unit\b 

visual regex

Объяснение регулярного выражения:

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
    \b      the boundary between a word char (\w) and 
          something that is not a word char 
-------------------------------------------------------------------------------- 
    [a-z]+     any character of: 'a' to 'z' (1 or more 
          times (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    unit      'unit' 
-------------------------------------------------------------------------------- 
    \b      the boundary between a word char (\w) and 
          something that is not a word char 
+0

Hey Paul. это соответствует обеим словам, потому что оба слова имеют единицу в комманде. Как я могу получить только второе слово. Как abcunit –

+0

Да, я получил это благодаря Павлу. –

+0

Добро пожаловать. Не забывайте, что если ответ удовлетворит ваш вопрос удовлетворительно, вы можете [принять его] (http://meta.stackoverflow.com/a/5235/227183). ;-) –

2

Следующие должны делать то, что вам нужно.

my @matches = $str =~ /\b\w+unit\b/g;