códigos RegEx e correspondentes direita para a esquerda
Pergunta
stuggling um pouco com o RegEx, eu tenho 4 códigos em uma string
CODE4: Code3: CODE2: code1
cada código é opcional para além de code1
Então, eu poderia ter ab: bc: de: fg
ou
bc :: fg
de
ab ::: fg
Em cada caso, os itens acima code1 = fg dnd para a cara vida de mim eu não posso trabalhar fora do regex
Seria fácil de fazer como um parse cadeia de caracteres padrão, mas unforunatly por causa de objetos Buisness em precisa ser feito via regex :-( e retorno através de um fg vb.net RegEX.matche, grupos ( "Code1") (I esperança de que faz sentido)
Agradecemos antecipadamente por qualquer ajuda
Terminou com um pouco de RegEx que faz o trabalho, confuso pouco, mas ele funciona
(^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)
Ta tudo
Solução
Não há necessidade de usar uma expressão regular aqui.
Eu não sei o idioma que você está usando, mas dividir a string em ':'. E você terá uma série de códigos
Se você realmente quer apenas para validar se um string é válido para este, em seguida,
/(\w*:){0,3}\w+/
corresponde à sua descrição e os poucos exemplos que você deu.
Outras dicas
Eu não sei por que você tem que coincidir com os códigos de direita para a esquerda. Basta usar uma expressão regular para escolher distante a string:
/(.*):(.*):(.*):(.+)/
e então você tem code1 em US $ 4, CODE2 em US $ 3, Code3 em US $ 2, CODE4 em $ 1.
(CODE1)?:(CODE2)?:(CODE3)?:CODE4
iria funcionar - se o líder: não importam. Caso contrário, se você não pode ter dois pontos principais, enumerate:
(CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4
Não há nada especial sobre o fato de que o direito do maior parte é obrigatório, e mais à esquerda partes não são.