#java #regex
#java #регулярное выражение
Вопрос:
У меня есть регулярное выражение в java, которому нужно разделить строку на 3 части (или 4, если операторы >=
, <=
, !=
), LHS, Operator (может иметь двойные значения, если operator >=
, <=
, !=
) и value . Поддерживаемые операторы >
, =
, <
, >=
, <=,!=
, и дополнительный IN
оператор.
Регулярное выражение, которое я использую для этого, является (?<=[><=!]|in)|(?=[<>= !]|in)
;
Однако для строки value=A B
оно возвращает значение в 4 частях. value
, =
, A
, B
. Однако ожидаемые значения в массиве value
: =
, A B
String [] arr =null;
arr = value.split(regexp);
Как изменить регулярное выражение (я вижу, удаляю ли я
в регулярном выражении его возврат нормально. Но нужно убедиться, что удаление
выше ничего не должно нарушать).
Комментарии:
1. Возможно, вместо этого вы захотите рассмотреть крошечный синтаксический анализатор.
2. Синтаксический анализатор в смысле чего-то для разделения строки на основе API для обработки строк?
3. Можете ли вы привести примеры допустимых и недопустимых выражений и как вы хотите их разделить? Вы уверены, что регулярных выражений достаточно для всех случаев?
4. Синтаксический анализатор в смысле синтаксического анализатора; у вас есть мини-язык, который может быть достаточно простым для обработки с упрощенной манипуляцией строками, но я, как правило, очень нервничаю каждый раз, когда люди начинают пытаться обрабатывать языки выражений специальным образом.
5. Вы также можете добавить a
в группу поиска :
(?<=[><=! ]|in)
. Также я разделяю мнения, высказанные ранее. Вместо этого лучше написать синтаксический анализатор. Например, вы не анализируете правильность операторов.