您好我正在尝试编写一个将一些文本转换为明确定义的标记的类。
字符串有点类似于以下代码:(brown) "fox" 'c';. 我想得到的是(来自 Scanner 的令牌或( , brown , ) , "fox" , 'c' , ;分割后的数组,我认为两者都可以正常工作)(因为它们是潜在的令牌),其中包括:
'带和的引用文本"- 带或不带小数点的数字
- 括号、大括号、分号、等号、锐利、||、<=、&&
目前我正在使用扫描仪进行此操作,我遇到了一些问题,即分隔符无法单独给我 () 等,所以我使用了以下分隔符\s+|(?=[;\{\}\(\)]|\b),现在我会得到"它,也可以'作为单独的标记ans 我真的很想避免它,我尝试添加一些负面的前瞻性,"但没有运气。
我尝试使用 StreamTokenizer 但它没有保留不同的引号..
PS我确实搜索了该网站并尝试用谷歌搜索它,但即使有很多与扫描仪相关/正则表达式相关的问题,我也找不到可以解决我的问题的东西。
编辑1:
到目前为止,我想出的\s+|^|(?=[;{}()])|(?<![.\-/'"])(?=\b)(?![.\-/'"])
可能还不够清楚,但是当我有类似的事情时:
"foo";'bar')(;{
gray fox=-56565.4546;
foo boo="hello"{
我想得到:
"foo", ;, 'bar', ), (, ;,{
gray, fox, =, -56565.4546,;
foo, boo, =, "hello",{
但相反,我有:
"foo", ;'bar', ), (, ;,{
gray, fox, =-56565.4546,;
foo, boo, ="hello",{
=请注意,当在 the和其余部分之间有空格时,例如 :gray fox = -56565.4546;会导致:
gray, fox, =, -56565.4546,;
我对上述正则表达式所做的是:
Scanner scanner = new Scanner(line);
scanner.useDelimiter(MY_MENTIONED_REGEX_HERE);
while (scanner.hasNext()) {
System.out.println("Got: `" + scanner.next() +"`");
//Some work here
}
