Ich versuche, eine JIRA-Kennung aus einer Textzeile zu extrahieren.
JIRA-Identifikatoren haben die Form [A-Z] + - [0-9] - Ich habe das folgende Muster:
%Vor% Das geht nicht, wenn jemand einen Text spezifiziert, der das Muster in einem anderen String enthält - zum Beispiel würde blah_blah_ABC-123
auf ABC-123 passen. Ich möchte nicht vorschreiben, dass ein Leerzeichen oder ein anderes Trennzeichen vor dem Treffer vorhanden sein muss, da dies fehlschlagen würde, wenn der Bezeichner am Anfang der Zeile stehen würde.
Kann jemand die notwendigen Runen vorschlagen?
Danke.
Sie können sicherstellen, dass das Zeichen vor dem Muster entweder ein Leerzeichen oder der Anfang der Zeichenfolge ist, die abwechselnd verwendet wird. Stellen Sie in ähnlicher Weise sicher, dass entweder Leerzeichen oder das Ende der Zeichenfolge folgt.
Sie können diese Regex verwenden:
%Vor%Atlassian selbst haben ein paar Webseiten herumschweben, die eine gute (Java) Regex vorschlagen:
%Vor%(Quelle: Ссылка )
%Vor%Aber ich mag es nicht wirklich, weil es die "DEF-33" von "abcDEF-33" abgleicht, während ich "abcDEF-33" lieber ganz ignoriere. Also benutze ich in meinem eigenen Code:
%Vor%Beachten Sie, dass "DEF-33" nicht mehr übereinstimmt:
%Vor% Ich brauchte diese Regex auch in JavaScript. Leider unterstützt JavaScript das LookBehind (?<!a)b
nicht, und deshalb musste ich es nach LookAhead a(?!b)
portieren und alles rückgängig machen:
Dies bedeutet, dass die zu matchende Zeichenfolge auch im Voraus umgekehrt werden muss:
%Vor%Wenn Sie Beispieldaten zu Ihrer Frage hinzufügen, erhalten Sie die besten Antworten auf diejenigen, die nicht Jira haben, usw.
Hier ist eine andere Sichtweise -
%Vor% Denken Sie daran, dass [0-9]
mit 0001 und Freunden übereinstimmt, die Sie wahrscheinlich nicht möchten. Ich denke, kann aber nicht verifizieren, Jira schneidet die Ausgabe Präfixe auf maximal 4 Zeichen ab. Also die Regex, die ich gemacht habe, erlaubt nur 1-4 Großbuchstaben; leicht zu ändern, wenn falsch. 10 Millionen Tickets scheinen für die Ausgabennummern ein ziemlich hohes Top-End zu sein. Ich ließ auch nachlaufende Interpunktion zu. Sie müssen diese Art von Sache möglicherweise abschmecken, wilde Daten. Sie benötigen g
und erfassen ein Array anstelle eines Skalars, wenn Strings mit mehr als einer Problem-ID übereinstimmen.