我有一个字符串
function flagClothes (clothes, userPrice){
return clothes.map(function(price) {
if(userPrice < price) return 'flagged' // I dont know exactly do you mean with flagged so i just return text, you can return anything.
})
};
我想以此格式提取时间戳
INSTALLDATE=Tue Nov 07 19:35:38 UTC 2017
即。删除时区。
正确的正则表达式是什么?
我可以删除Tue Nov 07 19:35:38 2017
,但我不确定如何匹配INSTALLDATE
并将其从匹配的字符串中删除。
我当前的正则表达式:
UTC
答案 0 :(得分:3)
年份是一个有用的标记,因为它无法在其他地方显示
$string =~ s/INSTALLDATE=(.*?)\s\w+(\s[0-9]{4})/$1$2/;
.*?
非贪婪地匹配到四位数模式之前的最后一个单词。
详细
?
之后的.*
量词使其匹配,直到后续模式的第一次出现。没有?
,它会尽可能地匹配,在
下一个模式是:space-word(\w+
) - space-4 digits([0-9]{4}
);时间戳结束
它将整个模式替换为()
中捕获的内容,首先是$1
$2
秒
答案 1 :(得分:1)
我更喜欢位置方法
use strict;
use warnings 'all';
use feature 'say';
my $s = 'INSTALLDATE=Tue Nov 07 19:35:38 UTC 2017';
my $date = join ' ', ( $s =~ /[\w:]+/g )[1,2,3,4,6];
say $date;
Tue Nov 07 19:35:38 2017
答案 2 :(得分:0)
部分受@zdim启发,你可以这样做:
$string =~ s/^.*?=(.*?)UTC\s*(.*)$/\1\2/
这匹配到第一个=
(^.*?=
)之前的所有内容,将=
之后和UTC
之前的所有内容保存到\1
({{1} }),跳过(.*?)
以及后面的任何空格(UTC
),并将该行的其余部分保存到UTC\s*
(\2
)。然后它用(.*)$
替换字符串,即第一个和第二个保存的部分粘在一起。结果是从开始到第一个\1\2
的所有内容都消失了,=
后跟任何空格也都消失了。例如:
UTC
我只知道两个步骤,虽然可能只有一个班轮。我用过:
$ echo "INSTALLDATE=Tue Nov 07 19:35:38 UTC 2017" |
perl -ne 's/^.*?=(.*?)UTC\s*(.*)$/\1\2/; print;'
Tue Nov 07 19:35:38 2017
得到echo "INSTALLDATE=Tue Nov 07 19:35:38 UTC 2017" |
perl -ne 'if(/=(.*)$/) { my $rest = $1; $rest =~ s/UTC\s+//; print $rest;}'
。
那是:
Tue Nov 07 19:35:38 2017
答案 3 :(得分:0)
正则表达式必须包含2个捕获组:
<script>
$(document).ready(function () {
$('#menuKategori li a').click(function () {
var gelenVeri = $('#menu').text();
$.ajax({
url: '/Home/_PartialKonular/',
data: { veri: gelenVeri },
datatype: 'Json',
type: 'Get'
})
})
})
</script>
和=
之间。UTC
和字符串结尾之间。所以正则表达式可以如下:
UTC
捕获两个组的优雅方法是:
/=(.*) UTC (.*)$/
其中my @res = $txt =~ /=(.*) UTC (.*)$/;
是一个数组,捕获正则表达式中包含的所有组。
然后你可以,例如打印两个捕获组,用空格分隔:
res
所以整个脚本可以如下:
print "Result: $res[0] $res[1]\n";