Regex помогите. Мне нужны идеи для решения ката String Calculator с Groovy - PullRequest
1 голос
/ 30 января 2011

Я работаю над Код калькулятора строки ката с Groovy.

Есть много сценариев, которые решают для достижения решения:

У меня есть:

//;\n1;2;3
//#\n1#2#3
//+\n1+2+3
//*\n1*2*3
//?\n1?2?3

Я хочу:

1,2,3

Моя реализация:

String numbers = "//;\n1;2;3"

numbers.find(/\/\/\S[\n]/) { match ->
    def delimeter = match[2]
    numbers = numbers.minus(match).replaceAll(delimeter, ",")
}

С помощью этого решения Я решил первое и второе выражения, но не знаю, как решить другие выражения .

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0

Проблема в том, что мы также должны учитывать любой символ, который соответствует синтаксису регулярных выражений, таких как +, * или ?

Ответы [ 2 ]

1 голос
/ 31 января 2011

Наконец-то у меня есть решение:

String numbers = "//+\n1+2+3"

numbers.find(/(?s)\/\/(.*)\n/) { match ->
    def delimeter = match[1]  // also match[0][2]
    numbers = numbers.minus(match[0]).replace(delimeter, ",")
}

Важный момент (? S):

В режиме dotall выражение.соответствует любому символу, включая терминатор строки.По умолчанию это выражение не соответствует символу конца строки.Режим Dotall также можно включить с помощью встроенного выражения флага (? S)

Но на самом деле проблема была здесь : .replace(delimeter, ",")

0 голосов
/ 30 января 2011
//(.)\n(\d)\1(\d)\1(\d)

Нужно использовать ссылки.(.) - математический thiw любого символа, и \ 1 - математический thiw символа на нем \

Для следующего примера вы можете применить это: //\[(.*?)\]\\n(\d)\1(\d)\1(\d) Это математический thiw

//[*] \ n1 2 ** 3

И последнее: //\[(.*?)\]\[(.*?)\]\\n(\d)\1(\d)\2(\d)

// [*] [%%] \ n1 * 2 %% 3

И наконец:

//\[(.*?)\](?:\[(.*?)\])?\\n(\d)\1(\d)(?:\2|\1)(\d)

Я думаю, что это может работать везде PS: (\ d)Вы можете заменить то, что вы хотите.Я думаю, что вам нужно (\ d *)

...