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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top