示例文本:
field1=value1
和field2=[field2Value]
或field3=field3Value
我想分别得到这些:
-
field1=value1
-
and
-
field2=[field2Value]
-
or
-
field3=field3Value
不能以"or"或"and"开头/结尾,例如,这些文本应该失败
例1:and field1=field1Value
例如:2 field1=field1Value and
到目前为止,我得到了什么 https://regex101.com/r/TEQujk/1
我们可以通过一次调用 String#split()
来做到这一点,使用不消耗的环顾,每当看到 和/或 时。 请注意,我在匹配项上调用String#trim()
,因为不会消耗空格。
String input = "field1=value1 and field2=[field2Value] or field3=field3Value";
String[] parts = input.split("(?=\s+(and|or))|(?<=(and|or)\s+)");
for (String part : parts) {
System.out.println(part.trim());
}
field1=value1
and
field2=[field2Value]
or
field3=field3Value
演示
class Main {
public static void main(String[] args) {
String str="field1=value1 and field2=[field2Value] or field3=field3Value";
String test[]=str.split("(?=and|or*+)|(\s)");
for (String str1:test)
{
if(!str1.equals(""))
System.out.println(str1);
}
}
}
输出:
field1=value1
and
field2=[field2Value]
or
field3=field3Value
不确定这是否是你想要的
(?<=^|bandb|borb) *b(.*?)b *(?=$|bandb|borb)|b(and|or)b
基本上,此模式匹配两种不同的情况:
- 围绕
and
/or
的字符串(以及字符串的开始/结束( -
and
or
自己
给定abc and def or ghi
样本
- 第一场比赛,第1组:
abc
- 第二场比赛,第2组:
and
- 第3场比赛,第1组:
def
- 第4场比赛,第2组:
or
- 第5场比赛,第1组:
ghi
解释
第一部分
(?<=^|bandb|borb) *b(.*?)b *(?=$|bandb|borb)
(?<= ) lookbehind
^ start of line
|bandb or "and" as a whole word
|borb or "or" as a whole word
) * follow by some spaces
b(.*?)b bunch of words (match as few as possible)
* follow by some space
(?= ) lookahead group
$|bandb|borb end of line OR and OR or
或第二部分:
|b(and|or)b OR and/or as a whole word
上面的正则表达式仅用于从字符串中提取单个令牌。 所以它与您的整个字符串不匹配(供您检查有效性(
你应该有你的逻辑来检查令牌是否有意义,或者你可以简单地有一个单独的正则表达式来检查,它看起来像:
^(w+(s+ands+|s+ors+))*(w+)$
如果值和等于之间没有空格,并且所需的参数之间总是有一个空格,您可以简单地使用
inputString.split("\s+");