这似乎应该很简单,但我不太擅长正则表达式,而且这似乎不容易在Google上找到。
我需要一个以字符串“dbo。”开头并以字符串“_fn”结尾的正则表达式。
就我而言,我不在乎这两个字符串之间有什么字符,只要开头和结尾正确即可。
这是为了匹配SQL Server数据库中的函数。
例如:
dbo.functionName_fn - Match
dbo._fn_functionName - No Match
dbo.functionName_fn_blah - No Match
这似乎应该很简单,但我不太擅长正则表达式,而且这似乎不容易在Google上找到。
我需要一个以字符串“dbo。”开头并以字符串“_fn”结尾的正则表达式。
就我而言,我不在乎这两个字符串之间有什么字符,只要开头和结尾正确即可。
这是为了匹配SQL Server数据库中的函数。
例如:
dbo.functionName_fn - Match
dbo._fn_functionName - No Match
dbo.functionName_fn_blah - No Match
^
和$
,因为这些符号只匹配文本的开头和结尾。相反,可以尝试使用以下方法:\bdbo\.\w+_fn\b
\b
是一个 单词边界:它匹配一个位置,这个位置要么是前面跟着一个单词字符而后面没有,要么是后面跟着一个单词字符而前面没有。这个正则表达式将在任意以下字符串中找到你需要的内容:
dbo.functionName_fn
foo dbo.functionName_fn bar
(dbo.functionName_fn)
...但不包括这一个:
foodbo.functionName_fnbar
\w+
匹配一个或多个 "单词字符"(字母、数字或 _
)。如果你需要更加包容的匹配,可以尝试使用 \S+
(一个或多个非空白字符)或者 .+?
(一个或多个任意字符,除了换行符以外的所有字符,非贪婪匹配)。非贪婪的 +?
避免将类似于 dbo.func1_fn dbo.func2_fn
的字符串误认为是一个匹配项。
^dbo\..*_fn$
这应该可以为你工作。\.
表示点本身,.*
表示任意数量的未限定字符序列。 - Dmitry Ginzburg\\
- Daniel A. White好的,简单的正则表达式如下:
/^dbo\..*_fn$/
然而,最好使用所用编程语言的字符串操作功能来删除字符串的前四个和后三个字符,并检查它们是否是您想要的内容。
\bdbo\..*fn
car.csclh.server.isr.businesslogic.TypePlatform
(尽管当时我只知道 car
和 Platform
)。不幸的是,这里的其他建议都对我没用,所以我想发布这篇文章。\bcar\..*Platform
你可以做的最简单的事情是:
dbo.*_fn$
它使用dbo
进行搜索,后跟任何字符,最后以_fn
结尾。
如果您可以确定在n
之后正确的下一个字符是空格,则可以将$
替换为空格
。
Scanner scanner = new Scanner(System.in);
String part = scanner.nextLine();
String line = scanner.nextLine();
String temp = "\\b" + part + "|" + part + "\\b";
Pattern pattern = Pattern.compile(temp.toLowerCase());
Matcher matcher = pattern.matcher(line.toLowerCase());
System.out.println(matcher.find() ? "YES" : "NO");
\bsubstring|substring\b
:
anythingsubstring
substringanything
anythingsubstringanything