JAVA 正则表达式标识字符串 \“string”\ 或字符串内的字符 \'char'\

JAVA Regex identifying strings \"string"\ or characters \'char'\ inside a string

提问人:Abdurrafay i190610 提问时间:9/17/2023 最后编辑:Abdurrafay i190610 更新时间:9/17/2023 访问量:47

问:

所以,我面临以下问题:

我得到的字符串是“string”或“char”的形式。简而言之,他们带着自己的“”和“”来了。当我的代码中的 String 变量本身存储它们时,它们看起来像这样:“\”string\“” 和 “\'char\'”。

(我还得到了很多不同格式的值,例如十六进制、八进制和整数。我正在使用 java 正则表达式来识别它们,并且我成功地做到了。唯一的问题是字符串和字符值。

我想使用 java 正则表达式来区分它们并获取没有所有“”和“”的 char 和字符串的值。

以下是我用来识别字符的模式,但它似乎不起作用。

模式 charPattern = Pattern.compile(“\s*[\'][\S\s][\']\s*”);

模式 charPattern2 = Pattern.compile(“\s*['][\S\s][']\s*”);

我所期望的是,该模式将能够识别这种性质的字符“char”\。之后,我可以将 \' 替换为空白来获取主值。

有人可以帮忙吗?

Java 正则表达式 字符串 解析 字符

评论

2赞 markspace 9/17/2023
在 Java 中,在字符串中引用一个字符。字符串中没有任何实际的 \,除非字符串文字包含字符串只是 .尝试打印出字符串以查看它们。如果您需要更多帮助,请向我们展示完整的代码。\""\\""\"string\"""string"
0赞 Abdurrafay i190610 9/17/2023
我基本上是从 C/C++ 文件中读取的。变量可以有 int、hexa、octa、char 和 String 等值。所以我得到“字符串”和“字符”作为输入(就像它们在 C/C++ 中一样)。当我打印包含这些值的 Java 字符串时,结果是“string”或“char”(带引号)。
0赞 VGR 9/17/2023
我怀疑正则表达式是否足以解析 C 字符串。也就是说,在正则表达式中与 相同。然而,更重要的是,你将字符串传递给 Pattern.compile,其中没有反斜杠字符。 是表示一个字符的 char 值。 是长度为 1 的 Java 字符串。 是长度为 2 的字符串,也是与一个空格字符匹配的正则表达式。希望你能从那里推断出来。[\S\s].'\\'"\\""\\s"

答:

1赞 Reilas 9/17/2023 #1

...当我的代码中的 String 变量本身存储它们时,它们看起来像这样:“\”string\“” 和 “\'char\'”。...

...我想使用 java 正则表达式来区分它们并获取没有所有“”和“”的 char 和字符串的值。...

您可以利用环顾语法来断言这些值。

这将产生重叠的值。
例如,在文本中,将捕获 。
"abc" + x + "123"" + x + "

((?<=\").+?(?=\")|(?<=').+?(?='))

下面是使用 Pattern and Matcher 类的示例。

String s = "123 \"abc\" 456 def '7'89";
Pattern p = Pattern.compile("((?<=\").+?(?=\")|(?<=').+?(?='))");
Matcher m = p.matcher(s);
while (m.find()) System.out.println(m.group(1));

输出

abc
7

或者,捕获引号,消除重叠值,并以编程方式删除基准。

(\".+?\"|'.+?')
String s = "123 \"abc\" 456 def '7'89", g;
Pattern p = Pattern.compile("(\".+?\"|'.+?')");
Matcher m = p.matcher(s);
while (m.find()) {
    g = m.group(1);
    System.out.println(g.substring(1, g.length() - 1));
}