perl regex for allchars in between(ex:start * end)

时间:2014-01-22 04:46:01

标签: regex perl

我需要像这样过滤字符串:

abc-somerandomchars-1.xml
xyz-somerandomstuff-1.xml 

我想过滤具有已知开始字符串(例如:abc,xyz)和结束字符串(例如:xml)的字符串,我不关心开始字符串和结束字符串之间的字符

我尝试了类似/($start).*.($end)/的内容,但似乎没有按预期工作。 请建议。

5 个答案:

答案 0 :(得分:2)

尝试以下表达式:

/^(abc|xyz).*\.xml$/

答案 1 :(得分:1)

您可以使用:

((?:abc|xyz).*\.xml)

<强> DEMO

<强>解释

enter image description here

答案 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