我想用正則表達式獲取函數調用的參數(不含parantheses)。正則表達式以egrep獲取分隔內容
我在使用cygwin的bash腳本中使用egrep
。
這是我走到這一步(帶括號):
$ echo "require(catch.me)" | egrep -o '\((.*?)\)'
(catch.me)
什麼是正確的正則表達式嗎?
我想用正則表達式獲取函數調用的參數(不含parantheses)。正則表達式以egrep獲取分隔內容
我在使用cygwin的bash腳本中使用egrep
。
這是我走到這一步(帶括號):
$ echo "require(catch.me)" | egrep -o '\((.*?)\)'
(catch.me)
什麼是正確的正則表達式嗎?
http://www.greenend.org.uk/rjk/2002/06/regexp.html
你要買什麼 - 是一個回顧後和預讀的正則表達式。
Egrep
不能這樣做。 grep
與Perl支持可以做到這一點。
從man grep
:
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of unimplemented features.
所以
$> echo "require(catch.me)" | grep -o -P '(?<=\().*?(?=\))'
catch.me
從手冊:
grep, egrep, fgrep - print lines matching a pattern
基本上,grep的用於打印的完整產品線,這樣你就不會做任何事情更多。
你應該做的是使用另一個工具,也許perl,這樣的操作。
OP使用-o標誌,打印只有一行的匹配部分。 – eaj
如果您可以使用SED那麼下面會工作 -
echo "require(catch.me)" | sed 's/.*[^(](\(.*\))/\1/'
您可以修改現有的正則表達式來此
echo "require(catch.me)" | egrep -o 'c.*e'
即使egrep的提供這個(從該名男子頁)
-o, --only-matching
Show only the part of a matching line that matches PATTERN.
它並不是真正的正確效用。 SED和AWK是這方面的主人。您將使用SED或AWK進行更多的控制。 :)
謝謝!但這不夠嗎? (刪除?之後。*)'echo「require(catch.me)」| grep -o -P'(?<= \()。*(?= \))'' – Matthias
在這種情況下 - 是的。但這取決於你的問題的背景。 '?' - 用於非貪婪的正則表達式。 –