正则表达式如何在双引号内获取值,包括双引号

时间:2015-08-27 13:47:39

标签: regex

这是我想要实现

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"

任何想法如何避免第一个双引号而只有拳头(和尾部相同)?

2 个答案:

答案 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/"[^"]*$//;
}
相关问题