基于no的Perl正则表达式匹配。的角色

时间:2013-10-23 14:09:58

标签: regex perl

我得到输入字符串,如:

A     BC Y

或者

A     BCY

关键是,它是基于位置的, 即我必须解析前1个字符串作为一个字符串,接下来7作为另一个字符串,接下来1作为另一个字符串,棘手的部分是最后一个字符串作为另一个字符串(在输入中是可选的) 即输入线长度可以是9个字符或10个字符。 我应该解析这个并获得4个字符串。

稍后我会将这些字符串放在数据库中并进行进一步处理。

我正在使用正则表达式

s/(.{1})(.{7})(.{1})(.{1})/

将这些值复制到4个变量中。

但问题是只有当行的长度正好是10个字符时才有效(当我们有最后一个字符时)。

当长度为9个字符时(缺少最后一个可选字符Y)那么正则表达式与该行不匹配,因此不进行解析。

长话短说,如何修改regex以使最后一个字符可选用于解析。

提前致谢。

P.S:问题听起来对专家来说非常微不足道,但是......

2 个答案:

答案 0 :(得分:1)

您几乎可以通过阅读perlreperlretut手册页来自行解决此问题。

正如其他人所指出的那样,?将正则表达式原子标记为可选。您还可以通过省略所有{1}序列来简化正则表达式。

/(.)(.{7})(.)(.)?/

答案 1 :(得分:0)

使用?进行可选(0或1)匹配

/(.{1})(.{7})(.{1})(.{1})?/

或者更简洁

/(.)(.{7})(.)(.)?/