[英]Need help in figuring out the right regex pattern
我需要從字符串中提取子字符串:
給定字符串: "< If( ( h == v ) ): { [ < j = (i - f) ;>, < k = (g + t) ;> ] }>"
我需要兩個子字符串: "j = (i - f)"
和"k = (g + t)"
。
為此,我嘗試了用戶模式正則表達式。 這是我的代碼:
Pattern pattern = Pattern.compile("[<*;>]");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
{
B2.add(matcher.group());
}
out.get(i).toString()是我的輸入字符串。 B2是一個ArrayList,它將包含兩個提取的子字符串。
但是,運行上面的代碼后,我得到的輸出是: [<, <, ;, >, <, ;, >, >]
。
我的模式不起作用! 非常感激你的幫助。 提前致謝!
您可以使用表達式<([^<]+);>
。
這將匹配<和;>之間的內容
Pattern pattern = Pattern.compile("<([^<]+);>");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
{
B2.add(matcher.group(1));
}
您可以在regexplanet上查看結果: http ://fiddle.re/5rty6
您的[
和]
會給您帶來麻煩。 這些符號的含義是: "match one among the symbols inside of these"
如果刪除這些"match one among the symbols inside of these"
,將會得到更好的結果。 這樣做時,您還必須避開尖括號。
下一步將是捕獲組。 您通常使用(
和)
。
您還必須擔心令人討厭的工件,例如字符串開頭的<
,它將與您的正則表達式混淆。 為了解決這個問題,您需要將它們從正則表達式中排除。
你可能最終會
"\<([^<>]*?)\>"
作為您的正則表達式。 確保檢查特定的Java文檔並轉義\\
以獲取最終結果
"\\<([^<>]*?)\\>"
如果您想在尖括號內使用其他<
和>
,則regex在這種情況下會遇到很多麻煩,也許您應該嘗試其他方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.