Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于最后一次出现的unscaped@字符拆分字符串的java正则表达式是什么_Java_Regex_String_Split - Fatal编程技术网

基于最后一次出现的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);
}