2015-07-29 5 views
1

Я хочу искать в строке для регулярного выражения, я делаю это следующим образом:Matching регулярного выражения выражения и сохранение его

Пусть TARGET = «строка с 1234 в»

if [[ "$target" =~ "{4}\d" ]] then 
    val=... 
fi 

I хотите захватить найденное регулярное выражение, т.е. хочу val = 1234. Каков наилучший способ сделать это?

ответ

0

Если вы ищете только для 4-значного числа, вы будете использовать /\b\d{4}\b/

Если Вы желаете, чтобы захватить val= часть, а также, просто префикс, который, таким образом Вы должны были бы /\bval=\d{4}\b/

И, наконец, если у вас есть случай, когда вы не знаете, что val из val= части есть, заменить val с \w+, то вы бы /\b\w+=\d{4}\b/

0

ли вы имеете в виду что-н. например val = s/\D(\d\d\d\d)\D/$1/, или val = /\d{4}/?

+0

Это возвращает истину на любой 4 цифр да и 5 цифр номера ... и 6 ... и 7 ... хотя он захватил бы первые 4 цифры этих чисел, но, вероятно, не то, что он хотел. – Flipybitz

+0

О, да, ты ровный, я исправил первый – yoko

0

совпавшей части проводятся в .sh.match массиве в KSH:

if [[ $target == *{4}(\d)* ]]; then 
    val=${.sh.match[1]} 
    # do something with $val 
fi 

Демо:

$ target="string with 1234 in" 
$ [[ $target == *{4}(\d)* ]] && echo "${.sh.match[1]}" 
1234 
Смежные вопросы