我不是太熟悉正則表達式,所以我一直有一些得到這與蘋果的NSRegularExpression如何使用NSRegularExpression刪除字符串中的括號?
我試圖刪除括號或括號中的詞......
例如工作:
的NSString *海峽= @「你怎麼使用(括號去掉的話)的字符串中」
得到的字符串應該是:@
「使用你怎麼在字符串中」謝謝!!!
我不是太熟悉正則表達式,所以我一直有一些得到這與蘋果的NSRegularExpression如何使用NSRegularExpression刪除字符串中的括號?
我試圖刪除括號或括號中的詞......
例如工作:
的NSString *海峽= @「你怎麼使用(括號去掉的話)的字符串中」
得到的字符串應該是:@
「使用你怎麼在字符串中」謝謝!!!
搜索
\([^()]*\)
,並沒有更換。
作爲一個詳細的正則表達式:
\( # match an opening parenthesis
[^()]* # match any number of characters except parentheses
\) # match a closing parenthesis
這將正常工作,如果括號是正確的平衡和嵌套的。如果括號可以嵌套(like this (for example))
,那麼你需要重新運行替換直到沒有更多的匹配,因爲只有最裏面的括號將在每次運行相匹配。*
要卸下支架,做相同的\[[^[\]]*\]
,大括號\{[^{}]*\}
。
有了條件表達式,你可以一次完成所有的三個,但是正則表達式看起來很醜陋,不是嗎?
(?:(\()|(\[)|(\{))[^(){}[\]]*(?(1)\))(?(2)\])(?(3)\})
但是,我不確定是否NSRegularExpression可以處理條件。可能不會。這個怪物的說明:
(?: # start of non-capturing group (needed for alternation)
(\() # Either match an opening paren and capture in backref #1
| # or
(\[) # match an opening bracket into backref #2
| # or
(\{) # match an opening brace into backref #3
) # end of non-capturing group
[^(){}[\]]* # match any number of non-paren/bracket/brace characters
(?(1)\)) # if capturing group #1 matched before, then match a closing parenthesis
(?(2)\]) # if #2 matched, match a closing bracket
(?(3)\}) # if #3 matched, match a closing brace.
* 不能匹配任意嵌套的括號(因爲這些結構不再是常規的)正則表達式,所以這不是這個表達式尤其但一般正則表達式中的限制。
感謝您的解釋哥們!這有助於很多! – Unikorn 2010-09-18 11:59:49
對於這個例子:(像這樣(例如)) NSString * match = @「\\(。* \\)」;似乎工作。 – Unikorn 2010-09-18 12:10:18
是的,但它會在保留(刪除)保留(刪除)保留時失敗 - 它從第一個到最後一個括號匹配,刪除中間的「保留」!您無法使用正則表達式匹配不規則的語言。有些風格(如Perl或.NET)可以進行遞歸匹配,但幾乎總是一個壞主意。這不是正則表達式。 – 2010-09-18 12:25:42