[英]Regex to return the characters between square brackets (but not the brackets)
[英]How to divide a string with a regex through characters that are outside square brackets?
我有這個字符串:
PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB] -> ∞
我想這樣划分:
PARTNER6
PARTNER7[PORTAL4;PORTAL5]
PARTNER1[PARTNER1WEB]
我嘗試使用這個表達式,但它划分了所有內容,包括括號中的內容
[\s,;]+
我不知道如何只划分括號外的內容
您可以使用此正則表達式來獲取所有匹配項:
\w+(?:\[[^]]*\]\w*)*\w*
正則表達式詳細信息:
\w+
:匹配 1+ 個單詞字符(?:\[[^]]*\]\w*)*
:匹配[...]
字符串后跟 0 個或多個單詞字符。 重復此組 0 次或多次\w*
:匹配0個或多個單詞字符代碼:
jshell> String regex = "\\w+(?:\\[[^]]*\\]\\w*)*\\w*";
regex ==> "\\w+(?:\\[[^]]*\\]\\w*)*\\w*"
jshell> String string = "PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB] -> ∞";
string ==> "PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB] -> ∞"
jshell> Pattern.compile(regex).matcher(string).results().map(MatchResult::group).collect(Collectors.toList());
$3 ==> [PARTNER6, PARTNER7[PORTAL4;PORTAL5], PARTNER1[PARTNER1WEB]]
我會在這里使用正則表達式查找所有方法:
String input = "PARTNER6;PARTNER7[PORTAL4;PORTAL5];PARTNER1[PARTNER1WEB]";
String pattern = "(\\w+(?:\\[.*?\\])?);?";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
System.out.println(m.group(1));
}
這打印:
PARTNER6
PARTNER7[PORTAL4;PORTAL5]
PARTNER1[PARTNER1WEB]
上面使用的正則表達式模式匹配帶有\w+
的單詞,后跟方括號中的可選術語,再后跟可選的分號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.