用于检测圆括号或方括号的正则表达式

时间:2012-07-03 12:02:39

标签: regex

我正在尝试使用正则表达式找到包含(JFK)[FRA]字符串的代码。

我不必确定所提到的机场代码是否正确。大括号几乎可以包含任何三个大写字母。

这是我当前的解决方案,它适用于圆括号,但不适用于方括号:

[((\[]([A-Z]{{3}})[))\]]

谢谢!

3 个答案:

答案 0 :(得分:5)

你的正则表达似乎试图匹配太多,试试这个:

^[(\[][A-Z]{3}[)\]]$

^匹配行的开头(您可能需要或可能不需要)

[(\[]是与([

匹配的字符类

[A-Z]{3}匹配三个国会大厦字母

[)\]]是与)]

匹配的字符类

$匹配行尾(您可能需要或可能不需要)

Click here to see the test results

请注意,[]是正则表达式中的特殊字符,我必须使用\来转义它们,以表明我想要一个文字字符。

希望这有帮助

答案 1 :(得分:3)

如果你想(1)匹配单个匹配组中的字母,(2)只匹配parens 括号(不是每个中的一个),那么这很难。一个解决方案是:

.([A-Z]{3}).((?<=\(...\))|(?<=\[...\]))

其中第一部分与字母匹配,尾部混乱检查括号/ parens。

请参阅http://fiddle.re/u19v - 这与[ABC](DEF)匹配,但不匹配(PQR](“正确”答案的匹配)。

如果您想要匹配中的parens,请将捕获的parens移到.之外:

(.[A-Z]{3}.)((?<=\(...\))|(?<=\[...\]))

这里的根本问题是正则表达式不够强大,无法按照您希望的方式匹配值对(如parens或括号)。所以每种不同的一对都必须单独处理。

答案 2 :(得分:0)

易于理解,更多的方言不可知和正确:

^([A-Z][A-Z][A-Z])\|\[[A-Z][A-Z][A-Z]\]$

根据您的正则表达方言,您可能需要更改parens和pipe的转义。