Сопоставьте вложенные символы с их значениями с помощью регулярных выражений - PullRequest
1 голос
/ 14 сентября 2011

Прежде всего, я малыш, когда дело доходит до регулярных выражений.

Мне нужно сопоставить вложенные символы с их значениями, хранящимися в массиве.

Например, учитывая эту строку

{(((x)))}

Мне нужно перевести это в это, используя Regexp или oldschool для циклов

Внутри фигурных скобок, внутри трех скобок, одна метка x, закрытая тремя скобками, закрытая фигурными скобками

Проблема в том, что мне нужно проанализировать много вложенных символов, включая символы Юникода, и я хочу знать, есть лиРекомендуется использовать регулярные выражения.

Дополнительные примеры:

Входная строка всегда будет палиндромом.

{(#x#)} 
{{{{*}}}}
<<<x>>>

будут преобразованы в их определения из статического массива

String[][] openers = { {"{","curly"} , {"(","parenthesis" }, {"<","inequality"} };
String[][] insiders = { {"x","x mark"}, {"#","pound"}, {"*","star"} };

в эти

фигурные скобки фунт x отметка фунт скобка фигурные

четыре вьющиеся звезды четыре вьющиеся

три неравенства x отметка трех неравенств

Это будет сделано в Java, кстати.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Я не пошел бы с регулярными выражениями, но вместо этого использовал бы простую "карту", String -> String, что-то вроде:

Map<String,String> explanations = new HashMap<String,String>();
explanations.put("{","inside curly braces");

Затем вы можете реализовать простую итерацию для данной строки,который принимает отдельные символы и преобразует их.

Для реализации «внутри трех парентезов» вы можете использовать систему интернационализации Java, поэтому вы можете написать «внутри {0} парентез» и затем, в синтаксическом анализаторе, когда вы встретитеодин и тот же символ более одного раза, увеличьте счетчик и используйте его для правильного форматирования строки.Учитывая, что синтаксис достаточно мощный, вы можете легко справиться с единственными, множественными и т. Д.

1 голос
/ 14 сентября 2011

Вы не можете сопоставить вложенную круглую скобку с регулярным выражением, этого недостаточно мощный , потому что у него нет стека.синтаксический анализ ad hoc с помощью синтаксического анализатора рекурсивного спуска .

. Или более простой подход состоит в том, чтобы удалять итерацию итеративно, например:

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