您好我正在尝试编写一个将一些文本转换为明确定义的标记的类。
字符串有点类似于以下代码:(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
}