Java 模式匹配以获取值
假设我有一个名为text的字符串,其中包含以下内容:Java 模式匹配以获取值,java,pattern-matching,c++,Java,Pattern Matching,C++,假设我有一个名为text的字符串,其中包含以下内容: blabla="A_VALUE" 通过模式匹配,是否可以直接检索引号内的值 例如:类似于格式化字符串的内容,您可以在其中写入模式%s,然后获取该值 目前,我发现的一个解决办法是: text = text.replace("blabla=",""); text = text.replaceAll("\"",""); 然而,这是非常丑陋的 注意:它不一定是java,我想知道这个概念是否存在,如果存在,它有什么名称。 这提供了一些见解,尽管我不
blabla="A_VALUE"
通过模式匹配,是否可以直接检索引号内的值
例如:类似于格式化字符串的内容,您可以在其中写入模式%s,然后获取该值
目前,我发现的一个解决办法是:
text = text.replace("blabla=","");
text = text.replaceAll("\"","");
然而,这是非常丑陋的
注意:它不一定是java,我想知道这个概念是否存在,如果存在,它有什么名称。
这提供了一些见解,尽管我不确定\\\\\\\\\\\\\\\s*(\\s+?)\\s*
的意思是什么,在这里有sscanf
,与您描述的类似
但是Java有一个Scanner类而不是这样的函数
另一种方法是使用正则表达式,然后检查相关的匹配器组,如下所述:中有sscanf
,与您描述的类似
但是Java有一个Scanner类而不是这样的函数
另一种方法是使用正则表达式,然后检查相关的匹配器组,如下所述:您的意思是获取包含任何转义双引号的字符串内容吗 如果是这样的话,那么这个模式应该适合您:
“(\\.[^]”)*“
这意味着:找到一个双引号,然后找到零个或多个转义字符或任何不是双引号的字符,直到找到另一个引号
细分:
-查找双引号“
-查找任何转义字符\\.
-查找任何非双引号的字符[^”]
-查找x或y零次或多次(x | y)*
-查找任何转义字符或任何非双引号字符零次或多次(\\.[^”])*
Source Result
----------------------------+---------------
var str1 = "a string"; | "a string"
var str2 = "a \" string" | "a \" string"
var str3 = ""; | ""
var str4 = "a string \\"; | "a string \\"
您的意思是获取包含任何转义双引号的字符串的内容吗 如果是这样的话,那么这个模式应该适合您:
“(\\.[^]”)*“
这意味着:找到一个双引号,然后找到零个或多个转义字符或任何不是双引号的字符,直到找到另一个引号
细分:
-查找双引号“
-查找任何转义字符\\.
-查找任何非双引号的字符[^”]
-查找x或y零次或多次(x | y)*
-查找任何转义字符或任何非双引号字符零次或多次(\\.[^”])*
Source Result
----------------------------+---------------
var str1 = "a string"; | "a string"
var str2 = "a \" string" | "a \" string"
var str3 = ""; | ""
var str4 = "a string \\"; | "a string \\"
要澄清的是,您是否试图从
字符串
中检索值
?可能的重复:要澄清,您是否试图从字符串中检索A_值
?可能的重复:如果最后一个字符是转义反斜杠,这不会失败吗?我前面评论的补充:输入后面还有更多带引号的字符串。@PatrickParker是的,很好。我做了一次编辑来纠正这个问题。这一行text=text.replaceAll(“\”,”);表明我实际上在删除引号。这就是为什么我使用模式匹配的原因,因为我需要查找的只是一个字符串。但是,如果我在回答中删除了“之后”的话,你的技术会起作用的@Maude是的,它可以很容易地被剥掉。或者,您可以使用正向lookback/lookahead regexp语法,而不是匹配quotemark,而是匹配quotemark后/前的零宽度位置。如果最后一个字符是转义反斜杠,这不会失败吗?我前面的注释的附录:输入后面有更多的带引号的字符串。@PatrickParker是,好电话。我做了一次编辑来纠正这个问题。这一行text=text.replaceAll(“\”,”);表明我实际上在删除引号。这就是为什么我使用模式匹配的原因,因为我需要查找的只是一个字符串。但是,如果我在回答中删除了“之后”的话,你的技术会起作用的@Maude是的,它可以很容易地被剥掉。或者,您可以使用正向lookback/lookahead regexp语法来匹配quotemark之后/之前的零宽度位置,而不是匹配quotemark。我在其他地方使用了pattern和regex,但会得到match.start,然后努力格式化match.end以删除不需要的字符。让我们假设我的模式是“blabla=”,然后我仍然需要在之后做一些工作来获得实际值。我缺少'group'关键字,它似乎允许您获取模式中的数据。我发现了有用的链接:有趣的链接。我在其他地方使用了pattern和regex,但会得到match.start,然后努力格式化match.end以删除不需要的字符。让我们假设我的模式是“blabla=”,然后我仍然需要在之后做一些工作来获得实际值。我缺少'group'关键字,它似乎允许您获取模式中的数据。我找到了有用的链接: