当我在perl中读取输入文件时,我得到了以下行
u_pwrup_control/g_pwrup_bscan_cell[262]_u_pwrup_bscan
现在我想使用regexp在参考文件中找到类似的行。但是当我使用下面的命令时,它不匹配。
while(<INPUT_FILE>){
$k=$_;
##opening ref file in read mode
while(<REF_FILE>)
if ($_ =~ /$k/) {
print $_;
} else {
print $k is not matching;
}
}
}
请告诉我如何匹配[]而不用逃避。
答案 0 :(得分:5)
您正在寻找功能quotemeta
。或者,您可以在正则表达式中使用\Q...\E
(有关perlre
的更多信息。)
应用于您的代码:
$k = quotemeta $_;
($_
是可选的),而不是$k = $_;
$k = $_;
并在正则表达式中执行$_ =~ /\Q$k/
。你没有在你的问题中提供很多细节,所以我不能保证这实际上与你想要匹配的内容相匹配,但至少[
和]
(以及任何其他不安全的角色)将在正则表达式中被转义
特别是,在阅读完行后,可能想要while
use strict;
,但这实际上取决于您正在阅读的内容。
但您的代码可以通过多种方式得到改进,包括:
use warnings;
和my $k = ...
。chomp
声明而不是全局变量(未声明))。所以写$k = ...
而不只是while
(只有当你声明它时)。while (<INPUT_FILE>){ $k = $_; ... }
:while (my $k = <INPUT_FILE>) { ... }
$_
open my $INPUT_FILE, '<', 'your_file_name' or die $!
很方便,但在那一个中,它实际上并非如此。while (<$INPUT_FILE>) { ... }
<?php
namespace AppBundle\Repository; //replace AppBundle by the name of your bundle
use Doctrine\ORM\Tools\Pagination\Paginator;
/**
* PerformanceRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class PerformanceRepository extends \Doctrine\ORM\EntityRepository
{
public function getLastWeigth()
{
$qb = $this->getEntityManager()->createQueryBuilder()
->select('p')
->from($this->_entityName, 'p')
->expr()->isNotNull('p.weight')
->orderBy('p.date', 'desc')
->setMaxResults(1);
$query = $qb->getQuery();
$result = $query->getSingleResult();
return $result;
}
}