小编zdi*_*dim的帖子

更新功能以识别链接

我有此功能来识别和转换标签,表情符号等

function convert_text($str) {
        $regex = "/[@#](\w+)/";
    //type and links
        $hrefs = [
            '#' => 'hashtag.php?hashtag',
            '@' => 'user.php?user'
        ];

        $result = preg_replace_callback($regex, function($matches) use ($hrefs) {
             return sprintf(
                 '<a href="%s=%s">%s</a>',
                 $hrefs[$matches[0][0]],
                 $matches[1], 
                 $matches[0]
             );
        }, $str);

        //$result = preg_replace("/U\+([A-F0-9]{5})/", '\u{${1}}', $result);
        $result = preg_replace('/U\+([A-F0-9]{5})/', '<span style="font-size:30px;">&#x\\1;</span>', $result);

        return ($result);
    }
Run Code Online (Sandbox Code Playgroud)

我想,使其认识http://https://从文字和比转换为:

<a href="http://link.com">http://link.com</a> 如何在函数内部实现呢?

php regex arrays function href

1
推荐指数
1
解决办法
355
查看次数

如果数据中不存在定界符值,请删除双引号

给出了一个输入文件,该文件的每一行包含每一列的引号和回车符/换行符。

  • 如果该行包含新行,则将其附加在引号内的同一行中,例如,第1行

  • 如果没有定界符(,),则删除每列的双引号。

  • 删除回车符,即(^ M)

为了举例,给出以下输入文件

"name","address","age"^M
"ram","abcd,^M
def","10"^M
"abhi","xyz","25"^M
"ad","ram,John","35"^M
Run Code Online (Sandbox Code Playgroud)

我想通过sed / perl / awk脚本/ oneliner获得以下输出。

name,address,age
ram,"abcd,def",10
abhi,xyz,25
ad,"ram,John",35
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经累了的解决方案用于附加上一行

sed '/^[^"]*"[^"]*$/{N;s/\n//}' sample.txt
Run Code Online (Sandbox Code Playgroud)

用于替换Control-M字符

perl -pne 's/\\r//g' sample.txt
Run Code Online (Sandbox Code Playgroud)

但是我没有达到我下面要求的最终输出

csv perl awk sed

1
推荐指数
1
解决办法
162
查看次数

如何在perl中删除逗号

我有此示例数据,我想删除逗号,特别是该行的最后一个逗号,顺便说一下,它是.csv文件。

W,S,Vbd2OX / NW,Vbd2OX / PW,Vbd3OX / NW,Vbd3OX / PW, 
ID,ID,11200,V 11200,V 11200,V 11200, 
6,1,0.69,5.56,-5.56,10.5,-10.12,
6,2,3.99,7,-5.13,-7,640.455,

这2个代码不起作用最后一个逗号仍然存在

$line =~ s/\,$//g;
Run Code Online (Sandbox Code Playgroud)

$line =~ s/,//g;
Run Code Online (Sandbox Code Playgroud)

csv perl

1
推荐指数
1
解决办法
59
查看次数

使用多个条件对嵌套哈希进行排序

我对 perl 编程有点陌生,我有一个可以这样表述的散列:

$hash{"snake"}{ACB2}   = [70, 120];
$hash{"snake"}{SGJK}   = [183, 120];
$hash{"snake"}{KDMFS}   = [1213, 120];
$hash{"snake"}{VCS2}   = [21, 120];
...
$hash{"bear"}{ACB2}   = [12, 87];
$hash{"bear"}{GASF}   = [131, 87];
$hash{"bear"}{SDVS}   = [53, 87];
...
$hash{"monkey"}{ACB2}   = [70, 230];
$hash{"monkey"}{GMSD}   = [234, 230];
$hash{"monkey"}{GJAS}   = [521, 230];
$hash{"monkey"}{ASDA}   = [134, 230];
$hash{"monkey"}{ASMD}   = [700, 230];
Run Code Online (Sandbox Code Playgroud)

哈希的结构总结如下:

%hash{Organism}{ProteinID}=(protein_length, total_of_proteins_in_that_organism)
Run Code Online (Sandbox Code Playgroud)

我想根据某些条件对这个哈希进行排序。首先,我只想考虑那些蛋白质总数大于100的生物,然后我想显示生物的名称以及最大的蛋白质及其长度。

为此,我将采用以下方法:

    foreach my $org (sort keys %hash) {
        foreach my $prot (keys %{ $hash{$org} }) {
            if ($hash{$org}{$prot}[1] > 100) {
                @sortedarray = …
Run Code Online (Sandbox Code Playgroud)

perl hash multidimensional-array protein-database perl-hash

1
推荐指数
1
解决办法
132
查看次数

为什么 opendir 参数无效?

This is perl 5, version 30, subversion 1 (v5.30.1) built for MSWin32-x64-multi-thread
Win10
cygwin
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用 opendir。这是我的示例代码:

sub test($) {
   my $dir     = shift;
   opendir (DIR, $dir) || die "Couldn't open dir $dir $!";
}
sub main() {
   my $dir = `pwd`;
   test($dir);
}

Run Code Online (Sandbox Code Playgroud)

错误信息

Couldn't open dir /home/skidmarks/Projects/Perl
 Invalid argument at ./test.py line .
Run Code Online (Sandbox Code Playgroud)

pwd 返回一个 Unix 格式的目录路径 ('/')。我已经尝试过使用 Windows 格式的目录路径 ('\')。唯一有效的是对路径使用文字字符串,例如“。” 或“some_directory_path”。

我不能在 opendir 中使用变量作为路径吗?

perl

1
推荐指数
1
解决办法
289
查看次数

perl strftime 本地时间减去 12 小时

我正在使用 perl strftime for (datetime now)

perl -MPOSIX -e 'print POSIX::strftime("%m/%d/%Y %H:%M", localtime());'
Run Code Online (Sandbox Code Playgroud)

我想现在减去 12 小时的日期时间

输出示例: 2/7/2020 1:002/6/2020 13:00<- 仅减去 12 小时

请使用提到的代码帮助解决此问题

perl datetime strftime localtime

1
推荐指数
1
解决办法
357
查看次数

打印和三元条件运算符之间的奇怪交互

遇到print了我不明白的三元条件运算符之间的奇怪交互。如果我们这样做...:

print 'foo, ' . (1 ? 'yes' : 'no') . ' bar';

...然后我们得到输出...:

foo, yes bar

...正如我们所料。但是,如果我们这样做...:

print (1 ? 'yes' : 'no') . ' bar';

...然后我们就得到输出...:

yes

为什么在第二种情况下没有将“bar”附加到输出?

perl expression function

1
推荐指数
1
解决办法
91
查看次数

将文件句柄变量从 STDOUT 重新分配给没有 undef() 的文件时,Perl 的奇怪行为

执行以下简化代码时:

use strict;                                          # [01]
use warnings FATAL => 'unopened';                    # [02]
                                                     # [03]
my ($inHandle, $outHandle) = (\*STDIN, \*STDOUT);    # [04]
print $outHandle "STDOUT  1\n";                      # [05]
                                                     # [06]
# $outHandle re-assigned to outputA.txt ???          # [07]
open($outHandle, ">outputA.txt") or die ("A: $!\n"); # [08]
print $outHandle "FILE A\n";                         # [09]
print             "STDOUT? 2\n";                     # [10]
print STDOUT      "STDOUT  3\n";                     # [11]
close $outHandle;                                    # [12]
                                                     # [13]
# $outHandle is closed                               # [14]
print STDOUT      "STDOUT  4\n";                     # …
Run Code Online (Sandbox Code Playgroud)

perl warnings stdout filehandle

1
推荐指数
1
解决办法
120
查看次数

当我试图在搜索到的字符后查找字符时,Perl 正在返回哈希

我想在字符串中搜索给定的字符并返回它后面的字符。

根据此处的帖子,我尝试写作

my $string = 'v' . '2';
my $char = $string =~ 'v'.{0,1};
print $char;
Run Code Online (Sandbox Code Playgroud)

但这会返回 1 和一个哈希值(我上次运行它时,确切的输出是 1HASH(0x11823a498))。有谁知道为什么它返回一个散列而不是字符?

regex perl

1
推荐指数
1
解决办法
67
查看次数

如何解决 Perl eval() 中的“发现裸字”问题

以下代码返回“在 (eval 1) 第 1 行,靠近“*,out”的操作符预期位置找到了裸字(out 之前缺少操作符?)”

$val = 0;
$name = "abc";
$myStr = '$val = ($name =~ in.*,out [)';
eval($myStr);
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我可以通过用“//”包装“in.*,out [”块来解决这个问题。

但是“in.*,out [”可以变化。(例如:用户输入)。用户可能会错过给出“//”。因此,还有其他方法来处理这个问题吗?(例如:如果 eval() 尝试返回“在...处找到裸字”,则返回 0)

regex perl eval

1
推荐指数
1
解决办法
268
查看次数