No sé lo que grepWin admite, pero esto es lo que se me ocurrió para hacer que algo coincida exactamente dos veces.
/^((?!how).)*how((?!how).)*how((?!how).)*$/
Explicación:
/^ # start of subject
((?!how).)* # any text that does not contain "how"
how # the word "how"
((?!how).)* # any text that does not contain "how"
how # the word "how"
((?!how).)* # any text that does not contain "how"
$/ # end of subject
Esto asegura que se encuentran dos "cómo" s, pero los textos entre el "cómo" s y a cada lado de ellos no contienen "cómo".
Por supuesto, puede sustituir cualquier cadena por "cómo" en la expresión.
Si usted quiere "simplificar" sólo escribir la expresión de búsqueda en dos ocasiones, puede utilizar referencias hacia atrás así:
/^(?:(?!how).)*(how)(?:(?!\1).)*\1(?:(?!\1).)*$/
Refiddle with this expression
Explicación:
añadí ?:
para hacer la texto negativo de lookaheads sin captura. Luego agregué paréntesis alrededor del how
normal para convertirlo en un subpatrón de captura (el primero y el único).
he tenido que incluir "cómo" de nuevo en la primera búsqueda hacia delante porque es una búsqueda negativa hacia delante (es decir, cualquier captura que no contener "cómo") y el capturado "cómo" no se refleja todavía en ese punto.
Si la cadena de búsqueda tiene que ser una variable, esto no es posible con Regex. Necesitarías combinarlo con un lenguaje de scripting. Si no necesita ser variable, esta expresión regular sería: 'cómo estás. * Cómo estás ' – Jeff
@Jeff Es posible hacer referencia a un grupo coincidente en una expresión regular de JavaScript:'/(abc) \ 1/'coincide con' abcabc', pero no con 'abc'. –
¿Debe coincidir solo si aparece "cómo" _exactly_ dos veces? ¿Qué pasa si aparece tres o más veces? – Wiseguy