Можно ли вычесть символы в обратной ссылке Java regex из класса символов?Вычитание символов в обратной ссылке из класса символов в java.util.regex.Pattern
например, я хочу использовать String#matches(regex)
, чтобы соответствовать либо:
любой группы символов, которые являются
[a-z']
, которые заключены"
спичек: "abc'abc"
Безразлично 't match: "1abc'abc"
Не соответствует:' abc 'abc'
любой группа символов, которые являются
[a-z"]
, которые заключены'
спичек: 'а "а'
Не соответствую: '1abc" ABC'
Не соответствует: "abc'abc"
следующее регулярное выражение не будет компилироваться, так как [^\1]
не поддерживается:
(['"])[a-z'"&&[^\1]]*\1
Очевидно, что следующий будет работать:
'[a-z"]*'|"[a-z']*"
Но, этот стиль не особенно разборчивыми, когда a-z
заменяется гораздо более сложный класс символов, который должен храниться такой же в каждой стороне "или" условие.
Я знаю, что в Java, я могу просто использовать String
конкатенации, как в следующем:
String charClass = "a-z";
String regex = "'[" + charClass + "\"]*'|\"[" + charClass + "']*\"";
Но, иногда, мне нужно указать регулярное выражение в файле конфигурации, как XML или JSON, и т.д. ., где java-код недоступен.
Я полагаю, что я спрашиваю, почти определенно не представляется возможным, но я понял, что не мешало бы спросить ...
Вы не можете сделать это в классе символов. Однако вместо этого вы можете использовать отрицательный прогноз ('! \ 1) [a-z ']' – nhahtdh
' [az "] '|" [a-z'] "- Предполагаю, вы хотели добавить звездочку после каждой группы символов - т. е. [az "] * вместо просто [az"], которая будет соответствовать только одному символу. – bjfletcher
@bjfletcher Спасибо, что поймал мою опечатку – XDR