2010-01-18 52 views
1

我得到了一个只接受正则表达式进行匹配的系统,因为在我上线查找一些教程之前我从来没有做过这样的工作,但是真的很困惑,所以我在这里问。正则表达式初学者

正则表达式需要符合以下:

File.f 
File-1.f 
在这两种情况下,它必须返回在第二种情况( File)的 .-之前什么

我很感激帮助。

感谢

+1

请张贴更多的例子。这两个不足以给你一个有用的答案。 – 2010-01-18 14:36:15

回答

5

这应该这样做:

^[^\.\-]+ 

(英文:比赛已经在字符串的开头开始,由一切直到一个.-发现)

+0

谢谢你的快速回答。 – Acanthus 2010-01-18 14:37:49

+4

'^ [^ .-] +'也会这样做。 – 2010-01-18 14:38:08

+3

你不需要在字符类 – SilentGhost 2010-01-18 14:38:36

1
^([^.-]+).*\.f$ 

首先^意味着开始行的

() - 这是捕获并返回第一组的部分(取决于你语言是$1\1groups()[0]group(1)

[]手段之一从该设置字符

[^设置含这些字符,即它是“全部字符,但不是那些我列出了”反对[],这意味着“任何字符,但只有那些我列出”

+意味着先前的可从1重复无限次。

.是 '任意' 单个字符

*是从0到无穷大的时间重复。

\.意味着字符.(因为,是特殊的)

f只是字母f(或字楼实际上)

$是行的末尾。

1

我不知道你在用什么语言,但他们的工作大都是一样的。在C#中,我们将执行如下操作:

List<string> files = new List<string>() { 
    "File.f", 
    "File-1.f" 
}; 
Regex r = new Regex(@"^(?<name>[^\.\-]+)"); 
foreach(string file in files) { 
    Match m = r.Match(file); 
    Console.WriteLine(m.Groups["name"]); 
} 

指定的组允许您轻松提取正在寻找的前缀。以上印刷品

File 
File 

在控制台上。

我强烈建议您拿起本书Mastering Regular Expressions。每个程序员都应该对正则表达式感到满意,Friedl的书是目前最好的。它与Perl,Java,.NET和PHP有关,具体取决于您的语言选择。

+0

买书。没有Regex的程序员就像没有瑞士军刀的McGuyer。 – 2010-01-18 15:59:55

0

我同意Kimvais有一个非常坚实的答案(我不能投票很抱歉)

我写它在Perl之前,我阅读他们的答案,我想出了这个:

$ STRING1 =“John.f”; $ string2 =“Eric-1.f”;

$ string1 =〜m/^([0-9a-zA-Z] +)[.-]/i; 打印$ 1。 “\ n \ n \ n” 个;

$ string2 =〜m/^([0-9a-zA-Z] +)[.-]/i;

print $ 1。 “\ n \ n \ n” 个;

基本上它与Kimvais的相同,除了他会接受任何人物之前。或 - ,我不知道你是否想看,我的只接受数字或字母,然后a。或 -

祝你好运