是否存在以下更简洁/完善的方法:
<?php echo form_open('login/connect', array('class' => 'login-form')); ?>
-----------------------------
<?php echo form_close(); ?>
输入是最多2个my @components = split /-/, $original;
my $final_string = $components[0]."-".$components[1];
的字符串,最后一个是可选的。我一直想保留第一部分。即-
应该变成10-9-1
,而10-9
应该保持10-9
答案 0 :(得分:5)
use Modern::Perl;
my $re = qr/-\d+\K.*$/;
while(<DATA>) {
chomp;
s/$re//;
say;
}
__DATA__
10-9-1
10-9
仅输入一个字符串:
my $original = '10-9-1';
(my $final = $original) =~ s/-\d+\K.*$//;
say $final;
外植:
s/
- # find the first dash in the string
\d+ # 1 or more digits
\K # forget all we have seen until this posiiton
.* # rest of the line
$ # end of line
//
答案 1 :(得分:4)
在这里使用正则表达式匹配会更容易。
my ($final_string) = $original =~ /^([^-]*-[^-]*)/;
如果您想就地进行更改,则替换效果很好。
$original =~ s/^[^-]*-[^-]*\K.*//s;
答案 2 :(得分:2)
$original =~ m/^([^\-]+\-[^\-]+)/ or warn "Unable to match regex in string: $original";
my $final_string = $1;
认为这将回答您的查询。它不受任何特定字符串的限制-连字符后的文字应为数字或其他任何字符。如果它也不匹配也会警告您。
假设$original
变量只有一个要匹配的实例(从问题中的代码推断出)。
答案 3 :(得分:2)
您拥有的正则表达式解决方案可能是最好的方法,但是也可以使用split()
和join()
来实现。
# You need this to use 'say()'
use feature 'say';
while (<DATA>) {
chomp;
say join '-', (split /-/)[0, 1];
}
__DATA__
10-9-1
10-9
(split /-/)[0, 1]
将从split()
返回的列表中获取列表的前两个元素。