要匹配的Java正则表达式";“字符串”;

要匹配的Java正则表达式";“字符串”;,java,regex,lexical-analysis,Java,Regex,Lexical Analysis,我正在从头开始创建一个词汇表,并开始匹配(“”[\\w]+(“”)。 我有一个正则表达式^(\”[\\w]+(\”)$,但它无法捕获字符串 SSCCE: Map<String, String> lexicalMap = new HashMap<>(); // add all regex to `lexicalMap` via `lexicalMap.put([regex], [tokentype])` // Tokenize the string format of t

我正在从头开始创建一个词汇表,并开始匹配
(“”[\\w]+(“”
)。 我有一个正则表达式
^(\”[\\w]+(\”)$
,但它无法捕获字符串

SSCCE:

Map<String, String> lexicalMap = new HashMap<>();
// add all regex to `lexicalMap` via `lexicalMap.put([regex], [tokentype])`

// Tokenize the string format of the syntax to `List<String> tokens`
// List<String> tokens contains ["string", "data", "=", "test"] on the syntax: string data = "test"
for(String element : tokens) {
    for(String regex : lexicalMap.keySet()) {
        if(element.matches(regex))
            System.out.print(lexicalMap.get(regex) + " ");
    }
}
System.out.println();
以下是我下面的案例输入/输出:

输入:

"test"
""
test
string data = "test"
输出:

string
string
identifier
keyword identifier operator string

更新日期:2013年2月22日

  • 新增SSCCE段

我不知道发生了什么,但在将正则表达式从
^(\”[\\w]+(\”$
更改为
^(\”[\\w]*(\”)?$
后,它工作正常。

显示您的代码。您是如何进行匹配的?我已经添加了有关如何进行匹配的SSCCE。我想您的令牌应该包含:
[“字符串”、“数据”、“=”、“\”测试\“]``。注意我是如何存储的
“test”`wait wait<代码>“数据”不是字符串。如果它像-
“data\”
,那么它就是一个字符串。这将像-
\\\\\\\\\\\\\\\\\\\\\\'
一样存储。你首先需要确定你得到了什么样的输入?你需要做更多的工作才能使这个程序完全工作。问题是,
关键字
也是有效的标识符。因此,它将匹配
Map
中的两个正则表达式。我会说,你不应该把关键字和正则表达式匹配。由于Java中的关键字是固定的,因此最好有一个包含所有这些关键字的
集合,并与该集合相匹配。如果使用一个简单的字符串,例如
“@”
“输入一个数字:“
添加
(\”
)将使
成为可选的,您确定这是您想要的吗
\\w+
表示一个或多个单词字符,
\\w*
表示零个或多个。正则表达式中的括号似乎毫无意义,因此,
“^\”\\w*\“$”
,尽管它只允许引号之间的单词字符。@MikeM true使第二个
可以破坏字符串语法。我只需要有一个额外的过程来验证字符串标记中的语法。
string
string
identifier
keyword identifier operator string