我需要像这样过滤字符串:
abc-somerandomchars-1.xml
xyz-somerandomstuff-1.xml
我想过滤具有已知开始字符串(例如:abc,xyz)和结束字符串(例如:xml)的字符串,我不关心开始字符串和结束字符串之间的字符
我尝试了类似/($start).*.($end)/的内容,但似乎没有按预期工作。 请建议。
答案 0 :(得分:2)
尝试以下表达式:
/^(abc|xyz).*\.xml$/
答案 1 :(得分:1)
答案 2 :(得分:0)
如果要匹配字符串的开头和结尾,而不是中间的某个位置,则需要锚点:\ A匹配字符串的开头,\ z匹配结束。如果你的$ start和$ end可能包含特殊字符,但你希望它们按字面意思匹配,请使用\(\ Q ... \ E为你这样做)转义特殊字符。所以:
/\A\Q$start\E.*\Q$end\E\z/
答案 3 :(得分:0)
以上所有答案都是正确的,但不会一概而论。这是一种更智能的方法
/^[a-z]+-.*\.xml$/
这将捕获任何固定的开始字母模式。如果需要,您还可以包含数字。
答案 4 :(得分:-1)
$ cat test
xyz-somerandomchars-1.xml
abc-somerandomchars-1.xml
$ perl -p -e 's/^(abc|xyz)(.*)\.xml$/$2/g' test
-somerandomchars-1
-somerandomchars-1
更新:(阅读@Vijay的评论后)
$ cat test
xyz-somerandomchars-1.xml
abc-somerandomchars-1.xml
qwerxyz-somerandomchars-1.xml
abc-somerandomchars-1.xml.dwdwd
$ perl -n -e 'print if /^(abc|xyz)(.*)\.xml$/' test
xyz-somerandomchars-1.xml
abc-somerandomchars-1.xml