2015-08-11 9 views
5

Ho la seguente espressione regolarespaziatura essere incasinato in un'espressione regolare

var string_regex=(\s*[\{\[]?\%?[\s]*)[\@A-Za-z1-9_\.\s\+\-\*\\]*([\s\*]*=[\s\*\$]*[\{\"]?)[\@A-Za-z1-9_\.\s\+\-\*\\]*(\s*[\}\"]?)([\}\]\%\s]*) 

dove il [\@A-Za-z1-9_\.\s\+\-\*\\]* sarà sostituito da una stringa nel mio programma che viene scritto in un file che utilizza $1, $2, $3 and $4 come segue:

val newLineToBeReplacedOrAdded = "$1" + "set type cookies" + "$2" + "sugar cookies" + "$3" + "$4" 

La stringa sto testando su è

{% set type cookies = "sugar cookies" %} 

che corrisponde correttamente. Tuttavia, il problema che sto avendo è che quando scrivo fuori per il file, la distanza non si conserva accanto il segno di uguale così finisco con

{% set type cookies= "sugar cookies" %} 

E 'una differenza molto minore, ma io' d apprezzare il feedback su come migliorare ulteriormente l'espressione per evitare questo.

Here is a link to the regex!

Credo che il suo un problema specifico con [\@A-Za-z1-9_\.\s\+\-\*\\]*

risposta

3

reso match non avido di spazio prima di =.

[\@A-Za-z1-9_\.\s\+\-\*\\]*? 

https://regex101.com/r/yN4mX0/3

+0

Grazie! Ho imparato qualcosa di nuovo con la partita non avida :) E grazie per aver indicato dove si trova il problema. Dovrebbe aiutare anche gli altri – Zee

+0

@vks - secondo il gruppo di cattura, vorrebbero includere quegli asterischi. Quindi è tecnicamente valido per l'esempio. – lintmouse

3
(\s*[\{\[]?\%?[\s]*)[\@A-Za-z1-9_\.\s\+\-\*\\]*[^\s]([\s\*]*=[\s\*\$]*[\{\"]?)[\@A-Za-z1-9_\.\s\+\-\*\\]*(\s*[\}\"]?)([\}\]\%\s]*) 

               ^^ 

Dovrete chiedere gruppo precedente di non consumare quello spazio .Vedi demo.

https://regex101.com/r/yN4mX0/2

o se avete lookbehind uso

(\s*[\{\[]?\%?[\s]*)[\@A-Za-z1-9_\.\s\+\-\*\\]*(?<!\s)([\s\*]*=[\s\*\$]*[\{\"]?)[\@A-Za-z1-9_\.\s\+\-\*\\]*(\s*[\}\"]?)([\}\]\%\s]*) 

               ^^ 

See demo.

https://regex101.com/r/yN4mX0/4

+0

Wow che è stato veloce e quello che una risposta fantastica! Grazie! – Zee

+0

@Zee whihc language? – vks

+2

'[^ \ s]' dà un altro significato alla regex. Vedi [\ S] (https://regex101.com/r/yN4mX0/7) vs [(?