我试图从以下输入中隔离单词,括号和=>
和<=>
:
(<=>A B) OR (C AND D) AND(A AND C)
到目前为止,我已经来孤立的字(见Scanner#useDelimeter()
):
sc.useDelimeter("[^a-zA-Z]");
使用时:
sc.useDelimeter("[\s+a-zA-Z]");
我只得到括号内的输出
我不想要但想要AND
)
。
我该怎么做?执行\s+
得到相同的结果。
还有,分隔符与正则表达式有什么不同?我熟悉PHP中的正则表达式。符号是一样的吗?
输出:
(
<=>
A
(and so on)
您需要一个可以为零宽度的分隔正则表达式(因为有相邻的项),因此遍历是唯一的选择。试试这个:
sc.useDelimeter("((?<=[()>])\s*)|(\s*\b\s*)");
这个正则表达式表示"在括号之后或大于或在字边界处,丢弃空格"
还要注意,字符类[\s+a-zA-Z]
包括+
字符-大多数字符在字符类中失去任何特殊的正则表达式含义。似乎你试图说"一个或多个空格",但这不是你这样做。
在[]
中,^
表示'not',因此第一个正则表达式[^a-zA-Z]
表示'给我所有不是的a-z或a-z '
第二个正则表达式[\s+a-zA-Z]
表示"给我是的所有内容,空格,+,a-z或a-z"。注意,在字符类中,"+"是一个文字加号。