2015-08-11 8 views
5

Ich habe den folgenden regulären AusdruckAbstand in regulärem Ausdruck vermasselt wird

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

wo die [\@A-Za-z1-9_\.\s\+\-\*\\]* wird schließlich durch eine Schnur in meinem Programm ersetzt werden, die in eine Datei geschrieben werden, die $1, $2, $3 and $4 nutzt wie folgt:

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

Die Zeichenfolge ich es auf die Prüfung bin ist

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

, die es richtig übereinstimmt. Allerdings ist das Problem, das ich habe, wenn ich es in die Datei schreiben, wird der Abstand nicht neben dem Gleichheits erhalten unterzeichnen, damit ich am Ende mit

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

Es ist ein sehr kleiner Unterschied, aber ich Ich schätze Feedback darüber, wie man den Ausdruck verbessern kann, um dies zu verhindern.

Here is a link to the regex!

Ich glaube, sein ein Problem speziell mit [\@A-Za-z1-9_\.\s\+\-\*\\]*

Antwort

3

Machte es nicht gierige vor = auf Raumspiel.

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

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

+0

Vielen Dank! Ich habe mit dem nicht gierigen Match etwas Neues gelernt :) Und danke, dass du auf das Problem hingewiesen hast. Es sollte anderen auch helfen – Zee

+0

@vks - entsprechend der Erfassungsgruppe, würden sie diese Sternchen einschließen möchten. So ist es technisch für das Beispiel gültig. – lintmouse

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

               ^^ 

Sie vorherige Gruppe fragen müssen nicht, dass der Raum .Siehe Demo verbrauchen.

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

oder wenn Sie lookbehind Verwendung

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

               ^^ 

Siehe Demo.

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

+0

Wow das war schnell und was für eine fantastische Antwort! Vielen Dank! – Zee

+0

@Zee whihc Sprache? – vks

+2

'[^ \ s]' gibt der Regex eine andere Bedeutung. Siehe [\ S] (https://regex101.com/r/yN4mX0/7) gegen [(?

Verwandte Themen