Risposte:
È possibile utilizzare un'asserzione anticipata:
(?!999)\d{3}
Questo esempio corrisponde a tre cifre diverse da 999.
Ma se ti capita di non avere un'implementazione di espressioni regolari con questa funzione (vedi Confronto dei sapori di espressioni regolari ), probabilmente devi creare un'espressione regolare con le funzionalità di base da solo.
Un'espressione regolare compatibile solo con la sintassi di base sarebbe:
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
Questo corrisponde anche a qualsiasi sequenza di tre cifre che non lo è 999.
Se si desidera abbinare una parola A in una stringa e non corrispondere a una parola B. Ad esempio: Se si dispone di un testo:
1. I have a two pets - dog and a cat
2. I have a pet - dog
Se vuoi cercare righe di testo che hanno un cane per un animale domestico e NON ha un gatto , puoi usare questa espressione regolare:
^(?=.*?\bdog\b)((?!cat).)*$
Troverà solo la seconda riga:
2. I have a pet - dog
findstrcomando DOS . Offre solo un piccolo sottoinsieme delle funzionalità che ci si aspetta di trovare in uno strumento regex; lookahead non è tra questi. (Ho appena aggiunto il tag findstr da solo.)
Abbina il pattern e usa la lingua host per invertire il risultato booleano della corrispondenza. Questo sarà molto più leggibile e mantenibile.
no, resuscitando questa antica domanda perché aveva una soluzione semplice che non era menzionata. (Ho trovato la tua domanda mentre facevo qualche ricerca per una ricerca di ricompensa regex .)
Sono di fronte a una situazione in cui devo abbinare un modello (A e ~ B).
Il regex di base per questo è spaventosamente semplice: B|(A)
Basta ignorare le partite complessive ed esaminare le acquisizioni del Gruppo 1, che conterrà A.
Un esempio (con tutte le dichiarazioni di non responsabilità sull'analisi dell'html in regex): A è cifre, B è cifre all'interno <a tag
La regex: <a.*?<\/a>|(\d+)
Demo (guarda Gruppo 1 nel riquadro in basso a destra)
Riferimento
\dcon [[:digit:]]. Il primo riferimento indica che è specifico di Perl e PHP: "Esiste una variazione che utilizza la sintassi specifica di Perl e PHP che realizza lo stesso".
Il complemento di una lingua normale è anche una lingua normale, ma per costruirla è necessario creare il DFA per la lingua normale e trasformare qualsiasi errore valido nello stato in un errore. Vedi questo per un esempio. Ciò che la pagina non dice è che è stata convertita /(ac|bd)/in /(a[^c]?|b[^d]?|[^ab])/. La conversione da un DFA a un'espressione regolare non è banale. È più facile se puoi usare l'espressione regolare invariata e cambiare la semantica nel codice, come suggerito prima.
replace str.replace(/re/g, ''), quindi non è necessario ricongiungersi. anche se lanci un bel finale? come str.replace(/\re\s?/g, '')allora ti sbarazzi di qualsiasi spazio duplicato che potresti avere da qualcosa che viene sostituito nel mezzo di una stringa
La mia risposta qui potrebbe risolvere anche il tuo problema:
https://stackoverflow.com/a/27967674/543814
$1, dovresti leggere il gruppo $2.$2stato reso non-cattura lì, cosa che eviteresti.Esempio:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
Il primo gruppo di acquisizione specifica il modello che si desidera evitare. L'ultimo gruppo di acquisizione cattura tutto il resto. Basta leggere quel gruppo $2,.
findstrtag poiché tutte le risposte qui non sono valide per il tag.