Estoy tratando de escribir un patrón para reconocer la cadena de formulario IF de fórmula.
por ejemplo, cadena
[@param_6@] @IF(@param_5@==null;@param_5@;@IF(1==1;@param_2@;@param_4@)@)@ - @param_3@ - <@IF(@parameter_tag2@ == null;@param_4@;@param_5@)@>quiero obtener este resultado
1. Match: @IF(@param_5@==null;@param_5@;@IF(1==1;@param_2@;@param_4@)@)@ 2. Match: @IF(@parameter_tag2@ == null;@param_4@;@param_5@)@Mi patrón se parece a:
@IF\(.*\;.*\;.*\)@Pero la expresión regular me devuelve un resultado incorrecto.
Puedes usar
(?s)@IF\((?>(?!@IF\(|\)@).|(?<o>)@IF\(|(?<-o>)\)@)*\)@Vea la demostración de expresiones regulares . Detalles :
(?s) - RegexOptions.Singleline equivalente, . ahora también coincide con los caracteres LF@IF\( - una @IF( cadena(?>(?!@IF\(|\)@).|(?<o>)@IF\(|(?<-o>)\)@)* - cero o más repeticiones de(?!@IF\(|\)@).| - cualquier carácter que no inicie una secuencia de @IF( o )@(?<o>)@IF\(| - una subcadena @IF( y un valor se insertan en la pila de grupos "o", o(?<-o>)\)@ - una cadena )@ y se extrae un valor de la pila del grupo "o"\)@ - una cadena )@