글쎄, 나는 노력했으나 실패했다, 나는 다시 여기있다.절대 경로를 얻을 수없는 좋은 Perl 정규식이란 무엇입니까?
내 복근 경로 패턴과 일치해야합니다. 나는 더러운 모드 등에서 오전
/public_html/mystuff/10000001/001/10/01.cnt
..
#!/usr/bin/perl -Tw
use CGI::Carp qw(fatalsToBrowser);
use strict;
use warnings;
$ENV{PATH} = "bin:/usr/bin";
delete ($ENV{qw(IFS CDPATH BASH_ENV ENV)});
나는 파일 이름마다 시간을 untaint 동일한 파일을 몇 번 이상 더러운 힘 저를 열어야합니다. 내가 다른 뭔가 잘못하고있을 수도 있지만, 나는 미래의 참조를 위해이 패턴을 만드는 데 도움이 필요합니다.
my $file = "$var[5]";
if ($file =~ /(\w{1}[\w-\/]*)/) {
$under = "/$1\.cnt";
} else {
ErroR();
}
나는 초보자 시도에서 내가 우둔한 사람이라는 것을 알 수 있습니다.
제대로 작성되지 않았지만 작동하는 정규식으로 인해 슬래시 및 확장자를 $1
에 추가해야했습니다.
$file =~ /(\w{1}[\w-\/]*)/
내 절대 경로 /public_html/mystuff/10000001/001/10/01.cnt
일치 :
그래서, 내가 어떻게 그렇게 $1
이 /public_html/mystuff/10000001/001/10/01.cnt
누군가가 여기 내 손을 잡아 수 나타내는 내 표현을 수정하고 만드는 방법을 내게 보여 학습의 도움이 필요합니다?
어떤 도움을 주셔서 감사합니다.
그건 그렇고,'$ file = $ var [5];'충분하다; '$ var [5]'를 인용 할 필요가 없습니다. http://perldoc.perl.org/perlfaq4.html#What%27s-wrong-with-always-quoting-%22%24vars%22%3f를 참조하십시오. 또한 '@ var'은 나쁜 것입니다. 이름. –
고맙습니다. 그렇습니다. "var"는 질문에서 가능한 한 명확히하기 위해 수갑을 벗어났습니다. 나는 아직도 이중 따옴표를 배우지 않거나 규칙을 배우지 않고있다. 나는 작은 따옴표 -vs- double을 이해하므로 실제로 배우고 있습니다. –
/(\ w {1} [\ w - \ /] *) /는 슬레시 또는 확장과 일치하지 않습니다. /\/?(\w{1}[\w-\/\.]*)/와 같은 것이 필요할 것입니다. 선택적인 선행 슬래시를 추가했음을 주목하고, 첫 번째 단어 다음에 마침표를 추가했습니다. 물론 아래의 답은 여전히 더 낫습니다. 가능한 한 더 구체적입니다. 그러나 배우기 위해서이 대답을 갖는 것이 중요하다고 생각합니다. :) – Rini