我有这样的一帮行:绑定变量的正则表达式
John Smith
Jane Doe
Dr. Bruce Wayne
,我想提出的名称到CSV文件中有两列:title和全名。 我正在使用这个正则表达式:/(\w*\.)?(.*)/
,然后我打印"$1;$2"
。问题在于,在没有标题的名称中,perl抱怨未初始化的值为$ 1。我如何使它只是使用空字符串?
我有这样的一帮行:绑定变量的正则表达式
John Smith
Jane Doe
Dr. Bruce Wayne
,我想提出的名称到CSV文件中有两列:title和全名。 我正在使用这个正则表达式:/(\w*\.)?(.*)/
,然后我打印"$1;$2"
。问题在于,在没有标题的名称中,perl抱怨未初始化的值为$ 1。我如何使它只是使用空字符串?
只要改变你的正则表达式:
my $re = qr/(\w*\. |)(.*)/;
add alternation --^
一般来说,如果有必要做一个匹配的部分可选的使用,在(?: )
组?只是使用?捕获组后,会离开民主基金,如果省略了捕获变量,但您可以使用非捕获组捕获组内:
/((?:\w*\.)?)(.*)/;
要以另一种方式解决这一问题,Lingua-EN-NameParse可能的帮助。
这没有任何意义,或者你的正则表达式匹配,那么'$ 1'和'$ 2'都是绑定的,或者它没有绑定,那么它们都没有绑定。 (好吧,$ 1可能与你以前使用的正则表达式绑定在一起,但这是一个无关紧要的值,并不比未定义的更好)。无论如何,如果匹配失败,你不应该使用'$ 1' *或*'$ 2'! m42的答案显示了如何使正则表达式始终匹配。 – 2011-05-19 14:31:41
@Kilian:我知道,在第一组之后我忘了一个'?'。我仍然不得不放置'|'来使其工作。 – 2011-05-19 16:06:27
你会错过“马丁路德金牧师”的称号。和“Suess医生”...... – tadmc 2011-05-20 01:10:28