Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Java正则表达式:如果缺少,则在字符串的开头和结尾添加引号_Java_Regex - Fatal编程技术网

Java正则表达式:如果缺少,则在字符串的开头和结尾添加引号

Java正则表达式:如果缺少,则在字符串的开头和结尾添加引号,java,regex,Java,Regex,我想创建一个简单的正则表达式,在使用Javastring.replaceAll方法时,在字符串的开头或结尾添加双引号“ 到目前为止,这是我最好的尝试: string.replaceAll("(^[^\"])($)(?<!\")", "\"$1$2\""); string.replaceAll((^[^\”)($)(?当您使用(^[^\”)($)(?在字符串的开头,并且您要求字符串的结尾显示在该字符的后面,然后执行额外的检查,确保该字符不是“(因此,末尾的后视是完全冗余的) 如果需要在第一

我想创建一个简单的正则表达式,在使用
Java
string.replaceAll
方法时,在字符串的开头或结尾添加双引号

到目前为止,这是我最好的尝试:

string.replaceAll("(^[^\"])($)(?<!\")", "\"$1$2\"");
string.replaceAll((^[^\”)($)(?当您使用
(^[^\”)($)(?在字符串的开头,并且您要求字符串的结尾显示在该字符的后面,然后执行额外的检查,确保该字符不是
(因此,末尾的后视是完全冗余的)

如果需要在第一个/最后一个字符不是
的开始或结束处添加
,则需要使用替代选项:

s=s.replaceAll("^(?!\")|$(?<!\")", "\"");
或者是一种更简单的非正则表达式方法,使用字符串连接和一对
startsWith
endsWith

if (!s.endsWith("\"") && !s.startsWith("\"")) {
    System.out.println("\"" + s + "\"");
}
看,方法是什么

  • (?s)^
    -启用
    模式.DOTALL
    标记并匹配字符串的开头
  • [^\”]
    -除
  • (?:.[^\“])?
    -一个可选序列(如果一个字符串只有1个字符?),包含任何0+字符,然后是除
    ”以外的任何字符
  • $
    -在字符串末尾

$0
代表整个匹配值。

为什么需要正则表达式来实现这一点?@Biffen,
($)
应该指示字符串的结尾,对吗?@Prashant,你为什么要问,
如果(!s.endsWith(…)…)…
提供更好的性能?-Regex倾向于提供简洁的代码,不会分散用户的主要目的和逻辑method@Chopo87你是对的,但这是一个非常简单的用例,不需要复杂的正则表达式来解决完美的问题!非常感谢@wiktor stribizew
s=s.replaceFirst("(?s)^[^\"](?:.*[^\"])?$", "\"$0\"");
if (!s.endsWith("\"") && !s.startsWith("\"")) {
    System.out.println("\"" + s + "\"");
}