這個問題在這里已經有了答案: 正則運算式提取方括號之間的文本 (15 個回答) 2 天前關閉。
我想要實作的是只捕獲名稱前面的標簽,我剛開始嘗試使用正則運算式,但我無法讓這個特定案例正常作業。所以我的用戶名格式如下:
[TAG]username
我只想捕捉 [TAG]
現在我正在使用這個:/^\[[^)]*]/- 但是這個我在括號內有問題,例如:[TAG]user[N]ame它會捕獲[TAG]user[N]而不是只捕獲[TAG]. 如果不會問太多,還請描述您如何提出解決方案的邏輯,以防找到用于學習目的的解決方案。
uj5u.com熱心網友回復:
如果您的標簽只是字母,則使用 this ^\[[a-zA-Z]*]。你讀成這樣:
^從行的第一個字符開始\[找一個鄉紳開口括號[a-zA-Z]*匹配從零到無限個小寫或大寫字母]右括號- 如果您想在一組中捕獲它,請使用:
^\[([a-zA-Z]*)],或與括號一起使用^(\[[a-zA-Z]*]) - 將第二組中的文本附加到此
(.*)$
如果您的標簽內部可以包含任何內容(除了]),則使用 this ^\[[^]]*]。它的意思是:
^從行的第一個字符開始\[找一個鄉紳開口括號[^]]*匹配除]零到無限次之外的所有內容。它由[]*與括號內的所有內容匹配的兩部分組成,^]這意味著除了]- 其次是
]。 - 要將標簽放在捕獲組中,請使用 this
^\[([^]]*)]或與括號一起使用^(\[[^]]*])
你也可以用惰性量詞來做到這一點,如果你的引擎支持它們,就像這樣^\[.*?]。讀作:
^從第一個字符開始\[匹配一個方括號.*?盡可能少地匹配任何字符。這里*?是惰性量詞匹配盡可能少的字符(貪婪的.*盡可能多地匹配)。]緊接著是右方括號- 要在捕獲組中使用標記,請使用:
^\[(.*?)],或與括號一起使用^(\[.*?])
uj5u.com熱心網友回復:
$ echo "[TAG1]username1[TAG2]UserName 2[TAG3]USR3" | grep -oP "\[[^\]] \]"
[TAG1]
[TAG2]
[TAG3]
將在括號中提供單詞。
邏輯:獲取一個或多個字符,除了 [ in []
- \[
轉義 [ 將其視為括號 - \]
轉義 ] 將其視為括號 - [^\[]
除括號
^以外的任何符號表示不是
[] 表示獲取這些括號內的所有字符 -
一個或多個 - grep -oP
o - 精確匹配
P - perl reg exp 語法
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316176.html
標籤:正则表达式
