正则表达式-匹配A和B之间字符串
需求:在匹配到 union的时候检测后面是不是union all
^是正则表达式匹配字符串开始位置
$是正则表达式匹配字符串结束位置
* (?!all) 的意思是 , 不匹配all
* 那么((?!all).)* 的意思就是匹配 不含all的字符(?!all) 跟 任意字符. 的组合,出现任何次
* ((?!all).)* 的结果就是 匹配了不包含all的字符串
检验如下:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
String str = "SELECT E_Name FROM Employees_China union SELECT E_Name FROM Employees_USA";
String pattern = "union\\s*((?!all).)*$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
}
}
或者使用
?=、?!、?<= ?<! 用于限定它前后的表达式,不能单独使用,本身没有作用。
a(?=b) 匹配后面有 b 的 a。
a(?!b) 匹配后面没有 b 的 a。
(?<=a) b 匹配前面有 a 的 b。
(?<!a) b 匹配前面没有 a 的 b。
正则表达式为 (?<=左侧的内容).*(?=右侧的内容)
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
字符串"my name iszhangvalue hello world"
①、想要获取"is" 和“value”之间的内容但是不包括“is”和“value”
(?<=is).*(?=value)
②、想要获取想要获取"is" 和“value”之间的内容包括“is”和“value”
is(.*?)value
需求:
写正则表达式:
提取出一段字符串中所有如下部分:
以 'Subject': ' 开头
紧接着以第一个 ', 结尾
正则表达式为:
(?<='Subject': ').*?(?=',)
如果是
(?<='Subject': ').*(?=',)这种匹配出来的就只有一个了,加一个?