Регулярное выражение для проверки того, что строка содержит {} - PullRequest
0 голосов
/ 07 декабря 2009

Мне нужно написать регулярное выражение, чтобы убедиться, что строка содержит {}, но не {или}. Может кто-нибудь пролить свет на это, пожалуйста?

Спасибо за помощь, вот несколько примеров.

, например

Действительный: {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 ]

2 голосов
/ 07 декабря 2009
/.*\{.*\}.*/

Это гарантирует, что строка содержит открывающую фигурную скобку где-то перед закрывающей фигурной скобкой, встречающейся где-либо в строке. Тем не менее, он не сможет гарантировать, что есть только одна открывающаяся и закрывающаяся фигурная скобка - для этого шаблоны .* должны быть изменены на нечто более ограничительное.

Если вы хотите поэкспериментировать и проверить эти регулярные выражения, вот хороший сайт .

1 голос
/ 07 декабря 2009

Для этой проблемы решение на основе регулярных выражений слишком тяжело. Если у вас есть возможность НЕ использовать регулярные выражения - не делайте, более простые операторы могут справиться с этим просто отлично.


Даже большая общая проблема - проверка правильности использования (потенциально вложенных) скобок - разрешима с помощью простого однопроходного цикла.

т.е. это правильно

{}{{{}{}}}

пока это не

{{}

Решение на 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
1 голос
/ 07 декабря 2009

Какой вкус регулярных выражений? В 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: true, B: false и C: false.

Большинство других вкусов будут похожи.

0 голосов
/ 07 декабря 2009

В строке есть ровно одна открывающая скобка и ровно одна закрывающая скобка, а закрывающая скобка следует за открывающей скобкой:

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

В строке есть любое количество фигурных скобок, но они не являются вложенными (другой закрывающей скобки до закрытия предыдущей никогда не будет), и они всегда сбалансированы:

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

Вложение не может быть вообще решено с помощью регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...