正则表达式以验证字符串是否包含{}

时间:2009-12-06 21:53:11

标签: regex

我需要编写一个正则表达式来验证字符串是否包含{}但不是{或}。有人可以对此有所了解吗?

感谢所有帮助,以下是一些例子。

e.g。

有效:{abc},as09 {02} dd,{sdjafkl} sdjk,sfdsjakl,00 {00} 00,aaaaa {d}

无效:{sdsf,sdfadf},sdf {Sdfs,333} 333

*********更新*******************

^ [A-ZA-Z0-9_-。 ] (?:{[A-ZA-Z0-9 _-] +。})[A-ZA-Z0-9_-?。 ] $是我需要的,谢谢你的帮助:))

4 个答案:

答案 0 :(得分:2)

/.*\{.*\}.*/

这将确保字符串在结束大括号之前的某处包含一个开口大括号,发生在字符串中的任何位置。但是,它无法确保只有一个开始和结束的大括号 - 要做到这一点,.*模式必须更改为更严格的限制。

如果您想试验并测试这些正则表达式here's a good site

答案 1 :(得分:1)

什么样的正则表达式?例如,在JavaScript中,这样做:

var re = /\{.*\}/;

alert("A: " + re.test("This {is} a match"));
alert("B: " + re.test("This {is not a match"));
alert("C: " + re.test("This } is not a match"));

提醒A: trueB: falseC: false

大多数其他口味都类似。

答案 2 :(得分:1)

对于这个问题,基于正则表达式的解决方案过于沉重。 如果您有机会不使用正则表达式 - 请不要,更简单的语句可以处理它。


即使是非常普遍的问题 - 检查,如果使用(可能嵌套的)括号是正确的 - 可以使用简单的一次通过循环来解决。

即。这是正确的

{}{{{}{}}}

虽然这不是

{{}

python中的解决方案(易于翻译成其他语言):

def check(s):
    counter = 0
    for character in s:
        if character == "{":
            counter += 1
        elif character == "}":
            counter -= 1

        if counter < 0:
            # not valid
            return False

    if counter == 0:
        # valid
        return True
    else:
        return False

答案 3 :(得分:0)

在琴弦中只有一个左大括号和一个右大括号,而右大括号紧跟开口大括号:

^[^\{\}]\{[^\{\}]\}[^\{\}]$

字符串中有任意数量的大括号,但它们没有嵌套(在前一个大括号被关闭之前从未有过另一个大括号),并且它们总是平衡的:

^[^\{\}](\{[^\{\}]\})*[^\{\}]$

通常不能通过正则表达式来解决嵌套问题。