2015-10-22 74 views
1

我需要一个正则表达式查找字符串,其中括号不是封闭正则表达式查找字符串,其中括号不是封闭

例子:

02 Back for Good (Radio Mix.mp3 

查找“(无线电混合”

但如果

02 Back for Good (Radio Mix).mp3 

必须找到什么

+0

请分享到目前为止,你已经尝试了什么。 –

+0

我想知道如何“编程”正则表达式引擎来查找右括号应该是的地方。 –

+1

像这样的正则表达式可能会工作[Regex101示例](https://regex101.com/r/fU4eV8/3) – benjamin

回答

2

如果你想捕捉直到文件扩展名,你可以这样做:

\([^\)]*(?=\.\w+$) 

https://regex101.com/r/cB1jG2/1

它寻找一个左括号其次是什么除了一个右括号,然后正向前查找找到字符串的结尾文件扩展名。

如果你知道可能的文件扩展名,你可以更直译:

\([^\)]*(?=\.(?:wav|mp3)$) 

如果你能有嵌套括号,这可以匹配某些情况下,但不是所有,甚至能够降低到一些清洁剂:

\((?:\([^\(\)]*?\)|[^\)])*(?=\.\w+$) 

https://regex101.com/r/aQ1eO3/1

0

希望这将帮助你

preg_match('/\(.+\)$/','02 Back for Good (Radio Mix.mp3'); 
  • \(匹配的文字(
  • .+匹配一个或多个字符。
  • \)$与文字)匹配的字符串结尾。

因此,如果它是字符串中的最后一个字符,则整个表达式从第一个开括号到最后一个关闭括号匹配。否则,它不会匹配。

+0

感谢您的帮助,但它在我需要的另一个方向。 Find(Radio Mix.mp3 only if end of not parenthesis –

+0

@DavidZeller检查更新的答案,希望这会有所帮助 –

+0

虽然这个正则表达式可以回答这个问题,但提供了关于为什么和/或代码如何回答问题提高了它的长期价值 – JAL

0

以下正则表达式捕获所需的输出:

(\([\w\s]+).mp3 

工作示例可以是found on Regex101

它搜索打开的括号 - \( - ,抓住了字/位(\ W)和whitspaces(\ S),并附加文件扩展名 “MP3” - 这样, 。右括号丢失

相关问题