正则表达式匹配开头和结尾字符串

53

这似乎应该很简单,但我不太擅长正则表达式,而且这似乎不容易在Google上找到。

我需要一个以字符串“dbo。”开头并以字符串“_fn”结尾的正则表达式。

就我而言,我不在乎这两个字符串之间有什么字符,只要开头和结尾正确即可。

这是为了匹配SQL Server数据库中的函数。

例如:

dbo.functionName_fn - Match

dbo._fn_functionName - No Match

dbo.functionName_fn_blah - No Match

1
如果您是从搜索引擎中寻找“相反”的内容(因为“not”不能在搜索引擎中直接使用),请参阅“What is a regex to match a string NOT at the end of a line?”(它适用于Ruby,但对于大多数正则表达式环境仍然适用)。 - Peter Mortensen
6个回答

45
如果你想在一段较长的文本中搜索某个关键词,你不应该使用其他回答者所说的^$,因为这些符号只匹配文本的开头和结尾。相反,可以尝试使用以下方法:
\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 的字符串误认为是一个匹配项。


我有一个问题,不知道你是否知道。在Flex中,不支持\b。你有没有什么办法在Flex中实现\b? - Linda

33
^dbo\..*_fn$
这应该可以为你工作。

6
了解,FYI:^ 表示字符串的开头,$ 表示字符串的结尾。 - Steve Wellens
@Daniel A. White,..* 用于什么? - eawedat
6
@eawedat,\. 表示点本身,.* 表示任意数量的未限定字符序列。 - Dmitry Ginzburg
just escape it with \\ - Daniel A. White

8

好的,简单的正则表达式如下:

/^dbo\..*_fn$/

然而,最好使用所用编程语言的字符串操作功能来删除字符串的前四个和后三个字符,并检查它们是否是您想要的内容。


同意关于字符串操作的观点。但是,我正在使用CodeSmith Generator,并且无法访问源代码。谢谢! - bopapa_1979
@onesomeday,“..*”用于什么? - eawedat
@eawedat 这意味着一个字面上的“.”字符,后面跟着0个或多个任何其他字符。 - lonesomeday

4
\bdbo\..*fn

我在大量java代码中搜索特定库:car.csclh.server.isr.businesslogic.TypePlatform(尽管当时我只知道 car Platform )。不幸的是,这里的其他建议都对我没用,所以我想发布这篇文章。
以下是我用来找到它的正则表达式:
\bcar\..*Platform

0

你可以做的最简单的事情是:

dbo.*_fn$

它使用dbo进行搜索,后跟任何字符,最后以_fn结尾。

如果您可以确定在n之后正确的下一个字符是空格,则可以将$替换为空格


0
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


什么编程语言?Java? C#? 还是其他的? - Peter Mortensen
@PeterMortensen 这是 Java - ORHAN ERDAY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接