正则表达式查找括号未关闭的字符串
Regex to find string where parenthesis are not closed
我需要一个正则表达式来查找括号未闭合的字符串
示例:
02 Back for Good (Radio Mix.mp3
查找“(电台混音”
但是如果
02 Back for Good (Radio Mix).mp3
一定找不到
希望对您有所帮助
preg_match('/\(.+\)$/','02 Back for Good (Radio Mix.mp3');
\(
匹配文字 (
.
.+
匹配一个或多个字符。
\)$
匹配字符串末尾的文字 )
。
因此,如果整个表达式是字符串中的最后一个字符,则整个表达式将从第一个左括号匹配到最后一个右括号。否则匹配不上。
以下正则表达式捕获所需的输出:
(\([\w\s]+).mp3
一个工作示例可以是 found on Regex101。
它搜索左括号 -\(-,捕获 words/digits(\w) 和空格 ( \s) 并附加文件扩展名“mp3” - 这样就缺少右括号。
如果你想捕获直到文件扩展名,你可以这样做:
\([^\)]*(?=\.\w+$)
https://regex101.com/r/cB1jG2/1
它会寻找一个左括号,然后是 除了 一个右括号,然后是一个 正向先行 以在以下位置找到文件扩展名字符串的末尾。
如果你知道可能的文件扩展名,你可以更直白:
\([^\)]*(?=\.(?:wav|mp3)$)
如果你可以嵌套括号,这可以匹配某些情况,但不是所有情况,并且可能可以简化为更清晰的内容:
\((?:\([^\(\)]*?\)|[^\)])*(?=\.\w+$)
我认为最好的方法是尝试使用 2 个正则表达式,并计算括号组的数量与 (
或 )
相同,所以在这种情况下,您在所有情况下都是安全的:
const value = <titleToCheck>;
const allParenthesisAreCorrect =
(value.match(/\(.*?\)/g) || []).length !==
(value.match(/\(/g) || []).length ||
(value.match(/\(.*?\)/g) || []).length !==
(value.match(/\)/g) || []).length;
我需要一个正则表达式来查找括号未闭合的字符串
示例:
02 Back for Good (Radio Mix.mp3
查找“(电台混音”
但是如果
02 Back for Good (Radio Mix).mp3
一定找不到
希望对您有所帮助
preg_match('/\(.+\)$/','02 Back for Good (Radio Mix.mp3');
\(
匹配文字(
..+
匹配一个或多个字符。\)$
匹配字符串末尾的文字)
。
因此,如果整个表达式是字符串中的最后一个字符,则整个表达式将从第一个左括号匹配到最后一个右括号。否则匹配不上。
以下正则表达式捕获所需的输出:
(\([\w\s]+).mp3
一个工作示例可以是 found on Regex101。
它搜索左括号 -\(-,捕获 words/digits(\w) 和空格 ( \s) 并附加文件扩展名“mp3” - 这样就缺少右括号。
如果你想捕获直到文件扩展名,你可以这样做:
\([^\)]*(?=\.\w+$)
https://regex101.com/r/cB1jG2/1
它会寻找一个左括号,然后是 除了 一个右括号,然后是一个 正向先行 以在以下位置找到文件扩展名字符串的末尾。
如果你知道可能的文件扩展名,你可以更直白:
\([^\)]*(?=\.(?:wav|mp3)$)
如果你可以嵌套括号,这可以匹配某些情况,但不是所有情况,并且可能可以简化为更清晰的内容:
\((?:\([^\(\)]*?\)|[^\)])*(?=\.\w+$)
我认为最好的方法是尝试使用 2 个正则表达式,并计算括号组的数量与 (
或 )
相同,所以在这种情况下,您在所有情况下都是安全的:
const value = <titleToCheck>;
const allParenthesisAreCorrect =
(value.match(/\(.*?\)/g) || []).length !==
(value.match(/\(/g) || []).length ||
(value.match(/\(.*?\)/g) || []).length !==
(value.match(/\)/g) || []).length;