2011-05-12 79 views
4

如何匹配正则表达式中的可选字符?可选正则表达式匹配?

我想写一个小文件,对我们的NAS做一点家务。

脚本遍历指定根文件夹内的文件夹。

对于我的测试根C:\Users\Solignis\Desktop\Orders

这是我的第一场比赛发生时,它会检查,以确保文件我们的标准命名约定是城市+ 3位数文件夹+ 3位数的文件匹配数。

有时候,虽然我们有额外的文件,其上有_1 or _2来表示一个额外的页面。

我该如何让这个正则表达式也适合“可选”_1 or _2 and sometimes _3进入比赛?

代码:

$file =~ /^ ((C[A|F|L]|ME)) (\d{3}) (\d{3}) \. (PDF) /xmi 

我相信这是很容易位我仍然有对大脑回路不必“钻”到我做的阵列的这个巨大的哈希这是像在一些25K文件的阵列。

任何帮助将不胜感激。

感谢

+4

'[A | F | L]'是否适合你? '[AFL]'是正确的,恕我直言,还有双括号'((...))'到'(C [AFL] | ME)'会更好 – YOU 2011-05-12 01:54:57

+0

这样做是一回事吗?如果这样对我有用,那么它也适用于每个字母之间的交替。但你的方式不那么混乱。 – ianc1215 2011-05-12 01:59:14

+1

@Solignis,不相同,我认为你的正则表达式将匹配名为'“C | 111222.PDF”'的文件。和双括号会让你的$ 1和$ 2是一样的。但只是将'((...))'改成'(...)'会破坏你的代码,你需要更新使用$ 3,$ 4,$ 5,恕我直言的代码。 – YOU 2011-05-12 02:01:26

回答

8

喜欢的东西(_[1-3])?

?匹配零个或一个实例。

可能是你在找什么。

+0

让我试试 – ianc1215 2011-05-12 02:04:53

+0

可以扩展匹配'_ \ d *'? – ianc1215 2011-05-12 02:06:16

+0

@Solignis是 - 没问题 – jisaacstone 2011-05-12 02:07:43

4

类似(?: _[1-3])?如果不想抓住这个组。