str = "sysparm_type=list_data&count=20&start=0&p=incident%3Bq%3Aactive%3Dtrue%5Epriority%3D1%5EEQ&table=incident"
我已经为上面的字符串编写了一个正则表达式但我想只在不存在“priority”子字符串的情况下匹配它。这是我的正则表达式:
.*sysparm_type=list_data&count=(\d+)&start=(\d+)&p=incident.*active.*true^((?!priority).)*$&table=incident
但是正则表达式的这部分^((?!priority)。)* $无效。
答案 0 :(得分:1)
(a)regexp是查询字符串解析的错误解决方案 - 缓慢,内存消耗,容易出错
(b)尝试将任何现有的库用于此任务,例如apache commons:
select
a.DEPT
,a.DIV
,a.PART
,convert(datetime,convert(varchar(2),datepart("mm",a.Release_Date))+'/1/'+ convert(varchar(4),datepart("yyyy",a.Release_Date)),101) as rptng_mnth
from
@tmpReportData3 a
left join @tmpReportData4 b on b.dept = a.dept and a.div = b.div and a.part = b.part
where b.dept is null
order by
a.rptng_mnth
答案 1 :(得分:1)
Caret ^和$匹配整个字符串的开头和结尾。很贪心。
如果您只检查配置文件字符串是否存在,它会更简单,更容易阅读和维护吗?
String pattern = "((?!priority).)*"; <== pasted from above, prob not valid regex
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value" );
} else {
System.out.println("NO MATCH");
}
答案 2 :(得分:0)
如果您想检查subString
,我们会检查一个简单的解决方案str.indexOf(subString)
如果int
大于0
,则返回str
subString
}包含.*priority.*
。
如果你想在regExp中使用模式substring
,如果你确定它的出现和位置,你可以对applicationSignificantTimeChange:
进行更多的限制