我的字符串看起來像下面顯示的a
。我需要提取第一個//
和第一個後續/
之間的部分字符串。我使用sub
與perl = F
,但它大約比perl = T
慢4倍。所以我試着perl = T
,發現搜索從字符串的END開始?R子與Perl - 開始向後搜索?
a = "https://moo.com/meh/woof//A.ds.serving/hgtht//ghhg/tjtke"
print(gsub(".*//(.*?)/.*","\\1",a))
"moo.com"
print(gsub(".*//(.*?)/.*","\\1",a,perl=T))
"ghhg"
moo.com
是我所需要的。我很驚訝地看到這一點 - 是否記錄在某處?我怎樣才能用perl
重寫它 - 我有20M行可以使用,速度很重要。謝謝!
編輯:它沒有考慮到每個字符串將開始與http
你知道包'urltools'嗎?在這些任務中派上用場 – Sotos
對於TRE正則表達式,將惰性量詞與貪婪的量詞混合並不是一個好主意。在某些情況下,他們按預期工作,而在其他情況下,他們不會。在這種情況下使用'perl = TRUE',並且要記住'。*'儘可能匹配儘可能多的字符,'。*?'匹配儘可能少的字符,但'perl = TRUE',不符合換行符號。如果你需要,在模式開始處添加'(?s)'。 –