为什么文本文件中的这个正则表达式不适用于 smartmatch?

乔治

我使用smartmatch检查字符串是否与正则表达式模式匹配。在我决定将正则表达式存储在文本文件中后,它停止工作。

my $str   = '123456, some text.';
my $regex = qr/^\d+, some text\.$/;
print "Regex: $regex\n";

此时,打印的正则表达式为(?^:^\d+, some text\.$). 我将它复制粘贴到一个文件中,然后让代码读取文件并检索存储在$regexFromFile.

以下行证实了这一点,$regex并且$regexFromFile是相同的,然后我继续以$str各种方式针对正则表达式进行测试

print 'Is regex equal to regexFromFile? ' . ($regex eq $regexFromFile) . "\n";

print 'Does str match regex         using =~ ? ' . ($str =~ $regex)         . "\n";
print 'Does str match regexFromFile using =~ ? ' . ($str =~ $regexFromFile) . "\n";
print 'Does str match regex         using ~~ ? ' . ($str ~~ $regex)         . "\n";
print 'Does str match regexFromFile using ~~ ? ' . ($str ~~ $regexFromFile) . "\n";

该代码的最后一行与前三行的行为​​不同。

这是代码的完整输出:

Regex: (?^:^\d+, some text\.$)
Is regex equal to regexFromFile? 1
Does str match regex         using =~ ? 1
Does str match regexFromFile using =~ ? 1
Does str match regex         using ~~ ? 1
Does str match regexFromFile using ~~ ? 

(注意最后没有1。)

编辑:要回答评论,这里是文件的读取方式。

open(my $FILEHANDLE, 'file.txt') or die "Error: Could not open file.\n";
my @content = <$FILEHANDLE>;
close($FILEHANDLE) or print "Could not close file.\n";
my @content_woEol = ();
foreach my $line (@content){
    $line =~ s/\s*$//;
    push(@content_woEol, $line);
}
my $regexFromFile = $content_woEol[0];
用户8487873

的结果qr//实际上是一个预编译的正则表达式像您一样将打印的正则表达式复制粘贴到文件中,然后从文件中读取它,这不是问题。如果直接在代码中编写此行,您会遇到相同的行为:

my $regexFromFile = '(?^:^\d+, some text\.$)';

如果您想在这里使用 smatmatch,我建议您执行以下操作:

my $str   = '123456, some text.';
my $regex = '^\d+, some text\.$';

# Manually store this in the file: ^\d+, some text\.$
# Read $regexFromFile from the file

print 'Does str match regex         using =~ ? ' . ($str =~ /$regex/)         . "\n";
print 'Does str match regexFromFile using =~ ? ' . ($str =~ /$regexFromFile/) . "\n";
print 'Does str match regex         using ~~ ? ' . ($str ~~ /$regex/)         . "\n";
print 'Does str match regexFromFile using ~~ ? ' . ($str ~~ /$regexFromFile/) . "\n";

注意额外的/.../. 输出:

Does str match regex         using =~ ? 1
Does str match regexFromFile using =~ ? 1
Does str match regex         using ~~ ? 1
Does str match regexFromFile using ~~ ? 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

哈希中的ACCEPTS与smartmatch:有什么区别?

来自分类Dev

为什么这个正则表达式适用于 PHP 测试而不适用于 MySQL?

来自分类Dev

正则表达式适用于“查找”但不适用于“在文件中查找” - 为什么?怎么修?

来自分类Dev

为什么以下正则表达式不适用于Java?

来自分类Dev

为什么此正则表达式不适用于grep?

来自分类Dev

为什么ls -R(递归向下)不适用于正则表达式

来自分类Dev

为什么正则表达式 setminus 运算符不适用于 MySQL?

来自分类Dev

正则表达式用于文本文件中的任何单词

来自分类Dev

正则表达式不适用于javascript

来自分类Dev

正则表达式不适用于密码

来自分类Dev

正则表达式不适用于if语句

来自分类Dev

agrepl不适用于正则表达式

来自分类Dev

替换不适用于正则表达式

来自分类Dev

正则表达式不适用于\和]

来自分类Dev

正则表达式不适用于ZipCode

来自分类Dev

正则表达式不适用于

来自分类Dev

正则表达式不适用于密码

来自分类Dev

agrepl不适用于正则表达式

来自分类Dev

正则表达式不适用于if语句

来自分类Dev

正则表达式不适用于 PHP

来自分类Dev

正则表达式不适用于正则表达式注释

来自分类Dev

为什么此正则表达式替换不适用于JavaScript,而仅适用于其他引擎?

来自分类Dev

从文本文件读取正则表达式

来自分类Dev

正则表达式匹配文本文件

来自分类Dev

文本文件的正则表达式

来自分类Dev

正则表达式“ \\”不适用于Java中的split()方法

来自分类Dev

SonarQube:忽略不适用于正则表达式的模块中的问题

来自分类Dev

大文本文件中用于表格数据的Pythonic正则表达式

来自分类Dev

正则表达式不适用于PHP,但适用于Ruby

Related 相关文章

热门标签

归档