2013-07-31 5 views
-2

Таким образом, если строка $ а = «бла bluh bu.du» проверить, если строка имеет дю в нем с помощью:Regex найти подстроку в строке, содержащей образец

if($a =~ /\.du+/) 

Теперь его подтвердил, что строка имеет «.du». Как я могу получить только слово budu, теперь сохраненное в новой строке $ b? Я использую perl К сожалению, du должен был быть как расширение файла

+2

Действительно ли это соответствует вашей строке? –

+0

Ummm .... no, '/ \ du + /' проверяет цифру, за которой следует один или несколько 'u's. –

+0

Это все прошло, извините за неправильный вопрос – ban

ответ

3

Окружать часть, которую вы хотите захватить в круглых скобках.

if($a =~ /([a-zA-Z]*?du[a-zA-Z]*?)/){ 
    if (defined $1) { 
     my $word = $1; 
     print "$word\n"; 
    } 
} 
+1

Возможно, лучше использовать символ '\ w' charcolass для соответствия букв и привязать границы слов (' \ b'): '/ \ b (\ w * du \ ш *) \ б/'. Здесь также нет необходимости в ленивых квантификаторах. Кроме того, если ваше регулярное выражение совпадает, '$ 1' * будет * определено * (минимальное совпадение будет содержать' du'). → 'say $ 1, если $ a = ~/\ b (\ w * du \ w *) \ b /'. – amon

+0

см. Приведенные выше изменения – ban

+0

извините, я сделал глупую ошибку, это сработало – ban

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