String query = "Select Count(distinct c.requestId) FROM Abc1Value c WHERE 1=1 and c.templateName is NULL "
+" AND (c.quickStatus IS NULL OR c.quickStatus = 'S') "
+ " AND (c.sCode='MYCODE' OR exists (SELECT b.dseaReqId FROM drstSShareValue b WHERE b.dseaReqId=c.requestId and b.sCode='MYCODE')) "
+ " AND (upper(c.licenseNo) like '%"12548"%' or upper(c.docLicenseNo) like '%""%' or upper(c.uncontrolledLicense) like '%""%' or upper(c.nonAuthNo) like '%""%' or upper(c.reAuthNo) like '%""%') "
+ " and upper(c.grantedByCtryCode) like '%US%' ";
我想提取所有“like string”,即。
我在java(?I)(\\s)中使用正则表达式,如(\\s)*('%\'')(.?)(\“%”)
当我获取组时,它不会返回正确的结果。请建议。
要获得所需的匹配,您还可以使用不带任何捕获组的匹配,并在'%"
之后匹配零个或多个字符
(?i)(?<!\S)like\s*'%".*?"%'
正则表达式演示| Java演示
在爪哇
String regex = "(?i)(?<!\\S)like\\s*'%\".*?\"%'";
(?i)(\\s)+like(\\s)*('%\")(.*?)(\"%')
...*?=零次或多次
你可以使用正则表达式,(?i)like\s'%.*?%'
这意味着:
(?i)
以不区分大小写的方式匹配模式的其余部分,例如,它允许匹配以下所有单词:like
,like
,like
等。 \s
匹配空格字符一次或多次。.*?
匹配懒惰,任何字符任意次数。演示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String query = """
Select Count(distinct c.requestId) FROM Abc1Value c WHERE 1=1 and c.templateName is NULL
AND (c.quickStatus IS NULL OR c.quickStatus = 'S')
AND (c.sCode='MYCODE' OR exists (SELECT b.dseaReqId FROM drstSShareValue b WHERE b.dseaReqId=c.requestId and b.sCode='MYCODE'))
AND (upper(c.licenseNo) like '%"12548"%' or upper(c.docLicenseNo) like '%""%' or upper(c.uncontrolledLicense) like '%""%' or upper(c.nonAuthNo) like '%""%' or upper(c.reAuthNo) like '%""%')
AND upper(c.grantedByCtryCode) like '%US%'
""";
Matcher matcher = Pattern.compile("(?i)like\\s+'%.*?%'").matcher(query);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
like '%"12548"%'
like '%""%'
like '%""%'
like '%""%'
like '%""%'
like '%US%'
附加演示:请在regex101上查看。
注意:为了保持query
的外观整洁,我使用了作为JavaSE15一部分标准化的文本块(或多行字符串)特性。然而,这是没有必要的,你可以写它的方式,你张贴在你的问题。
我试图从一个大字符串中提取几个值,我很难提取它们,我厌倦了一些正则表达式模式,但它们总是给我不匹配的结果。无论如何,它们似乎在可用的在线正则表达式站点中有效,但在Scala中无效。我想做的是 输入: ESStor \磁盘 提取[输出]: 供应商名称 MO_May_MS_5.0 08765J54U3K4QVR0 我试图从输入字符串中提取这三个值,但无法做到。 有人能让我看看我做错了什么吗? 提前谢谢
我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?
问题内容: 我需要从此字符串中提取日期: BB通知:在04/10的11:28购买您的壁虱,最终卡号xxxx,$ 00,00。如果您不认识,请致电40032 2412。 也是整个日期04/04/2015 日期格式为dd / MM或dd / MM / yyyy 代码: String mydata =“ BB告知:在04/10的11:28,购买您的tickect,最终卡号xxxx,$ 00,00。如果您
问题内容: 我有这串 并且我需要提取这3个子字符串 1234 06:30 07:45 如果我使用此正则表达式\\ d {2} \:\\ d {2}我只能提取第一个小时的06:30 matcher.group(1)引发异常。 另外我也不知道如何提取1234。此字符串可以更改,但总是在’XX〜’之后 。您对如何将这些字符串与正则表达式匹配有任何想法吗? 更新 多亏了亚当的建议,我现在有了这个正则表达式
我想使用Gson将字符串转换为Foo对象: 下面是我的正则表达式: 如何使用此正则表达式将所有,.和替换为,,而不更改JSON中的键和值?
我有一根下面这样的弦 现在我希望我的程序验证我的输入是否与字符串“phone”的模式相同 我做了以下工作 没奏效。我也尝试了其他的组合。什么都不起作用。 问题:1。我怎样才能做到这一点,而不使用‘模式’像上面?2.如何用图案做到这一点。我尝试了如下模式 Pattern Pattern=Pattern.compile(“(\d+)”);Matcher match=pattern.Matcher(电话