我試圖創建一個正則表達式模式來匹配一個特定的字符串,並返回true
如果字符串匹配的模式和false
如果不是。這裏的條件是:Java正則表達式
- 必須與
[
開始和]
- 結束的每個項目內的支架必須用逗號隔開
- 用逗號隔開的每個項目都遵循這個正則表達式:
^[A-Za-z][A-Za-z0-9_]*$
如何讓一個正則表達式檢查所有這些條件?
我試圖創建一個正則表達式模式來匹配一個特定的字符串,並返回true
如果字符串匹配的模式和false
如果不是。這裏的條件是:Java正則表達式
[
開始和]
^[A-Za-z][A-Za-z0-9_]*$
如何讓一個正則表達式檢查所有這些條件?
在Java中,\w
沒有Pattern.UNICODE_CHARACTER_CLASS
標誌實際上與[a-zA-Z0-9_]
相同。所以,我會用
String pat = "\\[[a-zA-Z]\\w*(?:,[a-zA-Z]\\w*)*]";
查看IDEONE demo。與String#matches
一起使用,或者您必須在開頭添加^
(或\\A
),並在末尾添加$
(或\\z
)。
String pat = "\\[[a-zA-Z]\\w*(?:,[a-zA-Z]\\w*)*]";
System.out.println("[c1,T4,yu5]".matches(pat)); // TRUE
模式解釋:
\\[
- 字面[
[a-zA-Z]
- 英文字母(同\\p{Alpha}
)\\w*
- 從[a-zA-Z0-9_]
零個或多個字符集(?:
- 非捕獲組匹配的開始...
,
- 逗號[a-zA-Z]\\w*
- 見上文)*
- ...零次或多次]
- 一個字面意思]
(不需要在字面類以外的字面上轉義)。所以這與Zbynek的本質是相同的正則表達式,除了你用'\\ w'替換了'[a-zA-Z0-9_]'? –
如果是這樣,那麼兩者都適合我。謝謝你的答案。 –
封閉組中可能重複:
\[[A-Za-z][A-Za-z0-9_]*(?:,[A-Za-z][A-Za-z0-9_])*\]
這是應該出現在最終的字符串。根據特定語言逃脫特價商品。
正則表達式使下半部分重複(減少回溯)更好,並且不需要捕獲任何東西,所以:'[[A-Za-z] [A-Za-z0-9 _] *(? :,[A-Za-z] [A-Za-z0-9 _] *)* \]' – Andreas
是的。謝謝! –
任何地方都不允許有空格? – markspace