这是我想要实现
a)(123)
=> 123
b)("123")
=> 123
c)""123""
=> "123"
d)(""#12.20.AA"")
=> "#12.20.AA"
第一个双引号内的有效字符为"
,.
,#
和:
我尝试使用此[\w\"\.:#=/\-\+\t\s]+
,但显然是针对案例b返回""123""
,针对案例c返回""#12.20.AA""
,针对案例b返回"123"
。
任何想法如何避免第一个双引号而只有拳头(和尾部相同)?
答案 0 :(得分:1)
这个表达式对我有用:
\(?.*?"?("?[#:\d\.AA]+("(?="))?)"?.*\)?
您可以在第一个匹配组中获得匹配。同样的正则表达式和一些评论:
\(?
.*? # ? prevent the * to be eager
"? # include the " if there
( # group 1 (your match)
"?[#:\d\.AA]+
("(?="))? # positive lookahead: include the first " in case there are two of them
)
"?
.*\)?
在this demo link,您可以轻松地进一步尝试此表达式。
一般情况下,如果您需要有关正则表达式的权威信息,则为pretty good link。
希望这有帮助。
答案 1 :(得分:0)
if ($txt =~ /"/) {
s/^[^"]*"//;
s/"[^"]*$//;
}