我一直试图找出Java RegEx一段时间,现在将以下内容分成两部分:
l&<6:98>9"hello:world"-45:&<78:89>"hedhed:hdeh"+56
它应该在“-45”之后在冒号处拆分,忽略标签和引号内的所有冒号。双方都不一定要包含任何标签或引号。
非常感谢帮助:)
答案 0 :(得分:2)
这将是解析函数的起点:
/** example: findCharIndex(subject, ':'); */
public static int findCharIndex(String subject, char findChar)
{
boolean insideQuotes = false;
boolean insideTags = false;
for (int index = 0; index < subject.length(); index++)
{
char ch = subject.charAt(index);
if (ch == '"')
insideQuotes = !insideQuotes;
else if (!insideQuotes)
{
if (ch == '<')
insideTags = true;
else if (insideTags && ch == '>')
insideTags = false;
}
if (!insideQuotes && !insideTags && ch == findChar)
return index;
}
return -1;
}
答案 1 :(得分:1)
执行匹配而不是拆分更容易。
(?:[^"<:]|"[^"]*"|<[^>]*)*