正则报错:repeat operator未指定目标,如何匹配可选中间名?
你的正则错误原因及修正方案
嗨,我来帮你捋清楚这个问题~
你遇到的报错「target of repeat operator is not specified」,核心问题是写错了重复量词的位置:你把+直接放在了括号(前面,但+是用来指定前面的元素要重复1次或多次的,这里它前面没有任何可重复的单元(比如字符、字符类),正则引擎自然就懵了。
原来的正确思路是:我们需要匹配两种格式——纯字母的名字,或者「字母名字 + 空格 + 单个字母」。要把中间名首字母的部分做成可选,你应该把名字部分的重复量词+放在字符类[A-Za-z]后面,然后把「空格+单个字母」作为一个可选的分组。
修正后的正则应该是:
"dsfsf" =~ /^[A-Za-z]+(?:\s[A-Za-z])?$/ "dsfsf m" =~ /^[A-Za-z]+(?:\s[A-Za-z])?$/
我给你拆解一下这个正则的逻辑:
^[A-Za-z]+:从字符串开头匹配1个或多个字母(这是必填的名字部分)(?:\s[A-Za-z])?:这是一个可选的非捕获分组(用?:可以避免不必要的分组捕获,提升效率),里面匹配「一个空格 + 单个字母」,?表示这个分组可以出现0次(对应纯名字的情况)或1次(对应带中间名首字母的情况)$:匹配字符串结尾,确保整个字符串都符合格式,不会出现多余的字符
这样修改后,两种目标格式都能正确匹配,也不会再触发报错啦。
内容的提问来源于stack exchange,提问作者Daniel Viglione
相关产品推荐
相关产品推荐

