Ho sviluppato un'espressione regolare per identificare un blocco di xml all'interno di un file di testo. L'espressione si presenta così (ho rimosso tutti fuga java barre per rendere più facile lettura):Qual è la differenza tra [ s S] *? e .*? nelle espressioni regolari di Java?
<\?xml\s+version="[\d\.]+"\s*\?>\s*<\s*rdf:RDF[^>]*>[\s\S]*?<\s*\/\s*rdf:RDF\s*>
Poi ho ottimizzato e sostituito con [\s\S]*?
.*?
E improvvisamente smesso di riconoscere il codice XML.
Per quanto ne so, \s
significa tutti i simboli bianco-spazio e \S
significa tutti i simboli bianchi interlinea non o [^\s]
così [\s\S]
logicamente dovrebbe essere equivalente a .
non ho usato i filtri avidi, così che cosa potrebbe essere la differenza ?
Per impostazione predefinita, '.' non corrisponde ai separatori di riga.Può corrispondere a tutti i caratteri (compresi i separatori di riga) se si utilizza il flag 'Patter.DOTALL'. '[\ s \ S]' è impostato che include tutti gli spazi bianchi \ s e tutti gli spazi non bianchi \ S, che rappresentano in modo efficace tutti i caratteri (compresi i separatori di riga). – Pshemo
Il finale? non contribuisce in entrambi i casi. – EJP
Uno molto correlato: [* Qual è la differenza tra questi RegEx *] (http://stackoverflow.com/a/14648811/3832970) –