![](/img/trans.png)
[英]Split string into two separated by colon with regex in Java and ignore colons within tags and quotes
[英]Regex to get value between two colon excluding the colons
我有一個像這樣的字符串:
something:POST:/some/path
現在我想從字符串中單獨使用POST。 我使用這個正則表達式做到了這一點
:([a-zA-Z]+):
但這給了我一個冒號值。 即我得到這個:
:POST:
但我需要這個
POST
我的代碼匹配相同並替換它如下:
String ss = "something:POST:/some/path/";
Pattern pattern = Pattern.compile(":([a-zA-Z]+):");
Matcher matcher = pattern.matcher(ss);
if (matcher.find()) {
System.out.println(matcher.group());
ss = ss.replaceFirst(":([a-zA-Z]+):", "*");
}
System.out.println(ss);
編輯:
我決定使用lookahead / lookbehind正則表達式,因為我不想使用冒號replace
,例如:*:
. 這是我的最終解決方案。
String s = "something:POST:/some/path/";
String regex = "(?<=:)[a-zA-Z]+(?=:)";
Matcher matcher = Pattern.compile(regex).matcher(s);
if (matcher.find()) {
s = s.replaceFirst(matcher.group(), "*");
System.out.println("replaced: " + s);
}
else {
System.out.println("not replaced: " + s);
}
有兩種方法:
(?<=:)[a-zA-Z]+(?=:)
,或者 ":*:"
替換結果 注意:您可能希望為正則表達式定義String
常量,因為您在不同的調用中使用它。
查看更新,您只需要ReplaceFirst
:
String result = s.replaceFirst(":[a-zA-Z]+:", ":*:");
請參閱Java演示
當你使用(?<=:)[a-zA-Z]+(?=:)
,正則表達式引擎會檢查字符串中的每個位置是否為*
之前的*
,並且一旦找到,就會嘗試匹配1個以上的ASCII字母和然后聲稱有一個:
在他們之后。 使用:[A-Za-z]+:
,僅在找到正則表達式引擎后才開始檢查:
字符。 然后,匹配后:POST:
,替換模式替換整個匹配。 在替換模式中對冒號進行硬編碼是完全可以的,因為它們在正則表達式模式中是硬編碼的 。
您只需要訪問第1組:
if (matcher.find()) {
System.out.println(matcher.group(1));
}
請參閱Java演示
你的:([a-zA-Z]+):
正則表達式包含一個捕獲組 (見(....)
子模式)。 這些組自動編號:第一個具有索引1
,第二個具有索引2
,等等。
要替換它,請使用Matcher#appendReplacement()
:
String s = "something:POST:/some/path/";
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile(":([a-zA-Z]+):").matcher(s);
while (m.find()) {
m.appendReplacement(result, ":*:");
}
m.appendTail(result);
System.out.println(result.toString());
正如所指出的,可以使用reqex捕獲的組來替換。
以下代碼執行了它:
String ss = "something:POST:/some/path/";
Pattern pattern = Pattern.compile(":([a-zA-Z]+):");
Matcher matcher = pattern.matcher(ss);
if (matcher.find()) {
ss = ss.replaceFirst(matcher.group(1), "*");
}
System.out.println(ss);
這是你的解決方案:
regex = (:)([a-zA-Z]+)(:)
代碼是:
String ss = "something:POST:/some/path/";
ss = ss.replaceFirst("(:)([a-zA-Z]+)(:)", "$1*$3");
ss現在包含:
東西:*:/一些/路徑/
我相信你正在尋找...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.