Regex 如何让这个perl扩展正则表达式工作?
我有以下代码 输出 我希望这两个正则表达式是等效的,并且只捕获数组的第一行。然而,只有$nregex起作用 如何修复$regex,使其与x选项的工作方式相同 编辑 根据响应,更新了正则表达式,它可以正常工作Regex 如何让这个perl扩展正则表达式工作?,regex,perl,Regex,Perl,我有以下代码 输出 我希望这两个正则表达式是等效的,并且只捕获数组的第一行。然而,只有$nregex起作用 如何修复$regex,使其与x选项的工作方式相同 编辑 根据响应,更新了正则表达式,它可以正常工作 my $regex = qr/^ \s* Line \s* # Bare word (\d+)\. \s* # line number \[ \s* # Open brace
my $regex = qr/^ \s*
Line \s* # Bare word
(\d+)\. \s* # line number
\[ \s* # Open brace
(\w+) \s* # Text in braces
] \s* # close brace
.* # slurp
$
/x;
你的两个表情不一样。您需要在第一个中包含\s*位。/x允许您编写格式整洁的表达式,其中包含您注意到的注释。因此,/x版本中的空格并不重要,也不会对任何匹配活动产生影响 换句话说,您的/x版本相当于
qr/^Line(\d+)\.\[(\w+)].*$/x
顺便说一句,仅使用普通空间而不是\s*或\s+也会失败很多次;您的示例数据包含两个相邻的空格。这两个位置将不匹配单个空间
最后一个提示:当您必须在某个位置至少有一个空格时,您应该使用\s+强制至少有一个空格。一旦你知道这是可能的,你肯定可以找出在你的模式中哪些地方可能有用。你的两个表达式是不同的。您需要在第一个中包含\s*位。/x允许您编写格式整洁的表达式,其中包含您注意到的注释。因此,/x版本中的空格并不重要,也不会对任何匹配活动产生影响 换句话说,您的/x版本相当于
qr/^Line(\d+)\.\[(\w+)].*$/x
顺便说一句,仅使用普通空间而不是\s*或\s+也会失败很多次;您的示例数据包含两个相邻的空格。这两个位置将不匹配单个空间
最后一个提示:当您必须在某个位置至少有一个空格时,您应该使用\s+强制至少有一个空格。一旦你知道这是可能的,你肯定可以找出在你的模式中哪些地方可能有用。试着写同样的模式。使用/x,你的空白是无关紧要的。如果要匹配空格,需要使用[]*或\s*或类似的字符,就像在其他正则表达式中一样。如果您只想这样做,则。*$后缀是多余的。当然,如果您在循环中进行匹配,并且需要下一次尝试从行的开头开始,这可能会很有用,但使用“^”锚定已经解决了这一问题。请尝试编写相同的模式。使用/x,您的空白是无关紧要的。如果要匹配空格,需要使用[]*或\s*或类似的字符,就像在其他正则表达式中一样。如果您只想这样做,则。*$后缀是多余的。当然,如果您在循环中进行匹配,并且需要下一次尝试从行的开头开始,这可能会很有用,但使用^。
qr/^Line(\d+)\.\[(\w+)].*$/x