小编Tan*_*lus的帖子

java.util.regexp足够高效吗?

我需要在用户更改源文件时对源文件中的某些模式进行大量搜索,因此我需要进行时间和内存高效的正则表达式匹配.模式重复,所以应该编译一次,但我需要能够检索子部分(而不是只是确认一个匹配)

我正在考虑使用java.util.regexp或Jakarta perl5util(如果它仍然存在,我使用它已经过了几年),或者可能是Eclipse搜索引擎,虽然我怀疑它更聪明.

这两者之间是否存在显着的性能差异?

java regex

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

如何将shell命令应用于嵌套(和转载不良)子目录中的许多文件?

我正在尝试做类似以下的事情:

for file in `find . *.foo`
do
somecommand $file
done
Run Code Online (Sandbox Code Playgroud)

但命令不起作用,因为$ file非常奇怪.因为我的目录树有蹩脚的文件名(包括空格),我需要转义find命令.但是没有明显的转义似乎有效: -ls给我空格分隔的文件名片段 -fprint没有做得更好.

我也尝试过: for file in "找到.*.foo -ls"; do echo $file; done - but that gives all of the responses from find in one long line.

任何提示?我很高兴任何解决方法,但我很沮丧,我无法弄清楚这一点.

谢谢,亚历克斯

(嗨马特!)

bash shell for-loop escaping find

6
推荐指数
2
解决办法
6516
查看次数

在Shell脚本中测试任何协议

是否有人在shell中看到过,试图实现或以其他方式使用TAP?我们正在寻找跨多种语言创建单元测试(不要让我开始为什么到目前为止还没有这个),而且由于我们有很多Perl代码,我们将会关注TAP(其中包括I)想像).我找到了一个用于C的TAP库,Perl,当然,内置它,我甚至找到了一个Java的API.但缺少的一个方面是shell脚本测试.

并非我在单元测试shell脚本上发现了很多,但由于我们确实有数千行shell代码,所以能够以某种方式测试它会很好.

shell unit-testing tap

5
推荐指数
2
解决办法
8635
查看次数

获取AIX上运行进程的可执行文件的完整路径

这与HPUX上运行进程的可执行文件的完整路径类似,但AIX除外.

基本问题是:在AIX上,我如何确定当前可执行文件的完整路径?在做任何其他事情之前必须这样做(例如chdir),这很好.

到目前为止,我发现的最准确的答案是检查输出
svmon -P $$ -O format=nolimit,filename=on,filtertype=client
(其中$$有shell的意思是:当前的pid).这不仅是大量的C,而且svmon也不是很快,并且很容易压倒其余应用程序的运行时.

下一个最佳答案似乎只是简单地看一下argv[0],如果它有一个斜杠,它可以是一个完整的路径名(以前导/开头)或相对于当前的目录名(不是从头开始)领先/).如果它没有斜线,它就相对于某些东西而言PATH.
如果在这个解决方案之后,我最终得到了一个符号链接,那么也需要处理所有符号链接(硬链接可能超出任何解决方案的范围).这个解决方案看起来像是相对跨平台的,但在C代码中也很重(应该比svmon更快).我希望有竞争条件等等.

谢谢,

更新:我正在寻找一个提交给perl开发者的解决方案.而且他们会担心不安全的PATH,尤其是在setuid/ setgid场景.见perlsec.我认为我们可以在这里做好,但如果你结合setuid假装argv[0],你可以强迫perl认为它在其他地方,并加载错误的模块.上面的"下一个最佳"答案只有在perl的污点模式下才能真正起作用.

c aix

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

使用正则表达式如何在不包含周围字符串的情况下找到由其他两个图案包围的图案?

我想使用正则表达式(Perl兼容)能够找到由其他两个模式包围的模式,但不包括匹配匹配中周围模式的字符串.

例如,我希望能够找到字符串的出现次数:

Foo Bar Baz

但只有匹配包括中间部分:

酒吧

我知道这是可能的,但我不记得该怎么做了.

regex

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

调用子例程时perl autovivification

调用程序时为什么自动生效不起作用?在这种情况下有没有办法禁止它?

#!/usr/bin/env perl
no autovivification;
use Data::Dumper;

sub testsub { }

my $task;
print Dumper($task);    # $VAR1 = undef;
my $a = $task->{parent_id};
print Dumper($task);    # $VAR1 = undef;
my $b = testsub($task->{parent_id});
print Dumper($task);    # $VAR1 = {}; 
Run Code Online (Sandbox Code Playgroud)

perl autovivification

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

如何在Perl中替换连续且相同的字符?

我有一个类似的字符串 XXXXYYYYZZZYYZZZYYYY需要转换为 XXXXAAAYZZZAYZZZAAAY

$s =~ s/Y{2}+/AY/g;

这有2个问题,{2}+将YYYY转到AYAY;并且AY与YYYY(预期AAAY)的长度不同

如何在Perl中完成这项工作?

regex string perl replace

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

使用"OR"条件的正则表达式

我可以使用一些帮助来编写正则表达式.在我的Django应用程序中,用户可以点击以下URL:

http://www.example.com/A1/B2/C3
Run Code Online (Sandbox Code Playgroud)

我想创建一个允许接受以下任何一个有效URL的正则表达式:

http://www.example.com/A1  
http://www.example.com/A1/B2  
http://www.example.com/A1/B2/C3  
Run Code Online (Sandbox Code Playgroud)

我猜我需要使用"OR"条件,但是我无法让我的正则表达式进行验证.有什么想法吗?

更新:到目前为止这是正则表达式.请注意,我没有包含" http://www.example.com "部分 - Django为我处理.我只关心验证1,2或3个子目录.

^(\w{1,20})|((\w{1,20})/(\w{1,20}))|((\w{1,20})/(\w{1,20})/(\w{1,20}))$
Run Code Online (Sandbox Code Playgroud)

regex django django-urls

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

grep:匹配文字"+"

我需要在我的sql脚本中找到"(+)"的出现位置(即Oracle外连接表达式).意识到"+","("和")"都是特殊的正则表达式字符,我试过:

grep "\(\+\)" *

现在这确实返回"(+)"的出现,但也返回其他行.(看起来在同一条线上有任何开放和关闭的parens.)回想一下parens只适用于扩展grep,我试过:

grep "(\+)" *
grep "(\\+)" *

这两个都只返回包含"()"的行.因此,假设"+"无法转义,我尝试了一个老技巧:

grep "([+])" *

这样可行.我用非正则表达式工具交叉检查结果.

问题:有人可以用"+"字符解释究竟发生了什么吗?在"(+)"上匹配的方式是否较少?

(我正在使用cygwin grep命令.)

编辑:谢谢你的解决方案.- 现在我看到,根据Bruno引用的GNU grep手册," \+"在基本表达式中使用时,"+"表示扩展含义,因此匹配一个或多个"("s后跟一个") ".在我的文件中,总是"()".

regex grep cygwin

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

如何更改变量的最后一位

我想更改IP的最后一位。

IP=10.10.10.10  
echo $ip |cut -d"." -f1-3
Run Code Online (Sandbox Code Playgroud)

将显示“ 10.10.10”我想包括“ .0

bash

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

标签 统计

regex ×5

bash ×2

perl ×2

shell ×2

aix ×1

autovivification ×1

c ×1

cygwin ×1

django ×1

django-urls ×1

escaping ×1

find ×1

for-loop ×1

grep ×1

java ×1

replace ×1

string ×1

tap ×1

unit-testing ×1