基于最后一次出现的unscaped@字符拆分字符串的java正则表达式是什么
根据未转义的基于最后一次出现的unscaped@字符拆分字符串的java正则表达式是什么,java,regex,string,split,Java,Regex,String,Split,根据未转义的@字符的最后一次出现拆分字符串的正则表达式模式是什么 例如: Path1\\P@ath2\\路径3\\File1\\@12。1234wer@tjava\\@rep\o1-应使用第三个@符号拆分 Path1\\Path2\\Path3\\File1\\@12.1234wertjava\\@repo1@-应使用最后一个@符号进行拆分 Path1\\Path2\\Pat@h3\\文件1\\12.1234wertjava\\@rep\\o1-应使用第一个@符号拆分 您可以尝试以下正则表达式
@
字符的最后一次出现拆分字符串的正则表达式模式是什么
例如:
-应使用第三个Path1\\P@ath2\\路径3\\File1\\@12。1234wer@tjava\\@rep\o1
符号拆分@
-应使用最后一个Path1\\Path2\\Path3\\File1\\@12.1234wertjava\\@repo1@
符号进行拆分@
-应使用第一个Path1\\Path2\\Pat@h3\\文件1\\12.1234wertjava\\@rep\\o1
符号拆分@
/[^\\]@/
。它取第一个@
,前面没有\
然后使用您所使用的语言(根据您的标记,它似乎是Java,但您可能已经发布了一些您尝试过的代码)来使用此模式拆分字符串。如果您想拆分最后一次出现的@字符串
String filePath= "Path1\P@ath2\Path3\File1\@12.1234wer@tjava\@rep\o1";
int p=filePath.lastIndexOf(pattern.quote("@"));
String e=filePath.substring(p+1);
你需要一个消极的回顾:
string.split("(?<!\\\\)@");
格式化您的问题并显示尝试。这会在拆分时使用
@
之前的字符,并且对以@
开头的字符串不起作用@stephen:谢谢。我之前尝试过使用“@(?。.*@)”(我想这是一个负面展望),但它与最后一个@匹配,不管它后面是否跟\\。不知道有负面的回头看。尽管我实际上需要的是负前瞻,但有没有办法使用负前瞻或正前瞻找到精确的匹配项呢?理论上是的,但这没有什么意义。@
是要匹配的实际字符,而不是要在其上放置断言的字符。在边缘情况下,会得到不同的结果。例如(.*[^\\\\])(?=@)(.*)
保留@
符号并适用于示例,但不适用于@test
等字符串,其中@
是第一个字符,最后一个@
同时不带反斜杠。字符串。lastIndexOf()
采用普通字符串,而不是模式。
Pattern p = Pattern.compile("(.*)(?<!\\\\)@(.*)");
Matcher matcher = p.matcher(string);
String[] parts = new String[2];
if (matcher.matches()) {
parts[0] = matcher.group(1);
parts[1] = matcher.group(2);
}