正则表达式:仅当匹配大于一个字符时,才在两个字符之间进行匹配

时间:2018-07-02 07:42:55

标签: regex

我的文字:

Lorem_Ipsum_Resume (1).pdf (https://dl.web.com/Lorem_Ipsum_Resume%20(1).pdf)

我正在尝试提取:

https://dl.web.com/Lorem_Ipsum_Resume%20(1).pdf

我正在使用此表达式来匹配括号之间的文本:

/\((.*)\)/

但它正在返回:

1).pdf (https://dl.web.com/Lorem_Ipsum_Resume%20(1).pdf

1 个答案:

答案 0 :(得分:3)

如果您打算在一行中以http开头并以最后)结尾的括号内捕获链接,请使用

\((http.*)\)

请参见regex demo

如果您计划匹配不包含数字块的(...),并且不匹配最后一个),则可以使用

\((?!\d+\))(.*)\)

请参见another regex demo

(?!\d+\))否定超前会使所有匹配失败,其中(后跟1个或多个数字,然后是)

如果字符串始终包含平衡的括号并且可以使用PCRE,则可以考虑

(?!\(\d+\))(\(((?:[^()]++|(?1))*)\))

请参见another regex demo。该值在第2组中。正则表达式将匹配任何非(DIGITS)的平衡括号集。