Crmgo Blog

Verwendung von regulären Ausdrücken in 1C

Verwendung von regulären Ausdrücken in 1C

Von Zeit zu Zeit besteht die Notwendigkeit, die Übereinstimmung einer Zeichenkette mit einem bestimmten Muster zu überprüfen, Unterzeichenketten zu finden oder zu ersetzen, die dem Muster entsprechen. Für diese Zwecke werden reguläre Ausdrücke verwendet. In 1C ist diese Technologie über das COM-Objekt VBScript.RegExp verfügbar. Dieses Objekt ist in der Windows-Betriebssystemumgebung integriert und…

Verwendung von regulären Ausdrücken in 1C
Von Zeit zu Zeit besteht die Notwendigkeit, die Übereinstimmung einer Zeichenfolge mit einem bestimmten Muster zu überprüfen, Unterzeichenfolgen zu finden oder zu ersetzen, die dem Muster entsprechen. Zu diesem Zweck werden reguläre Ausdrücke verwendet. In 1C ist diese Technologie über das COM-Objekt VBScript.RegExp verfügbar. Dieses Objekt ist in der Windows-Betriebssystemumgebung integriert und einsatzbereit.

1. Erstellen des Objekts.

RegExp = Новый COMОбъект("VBScript.RegExp");

2. Eigenschaften.

Eigenschaft Datentyp Beschreibung Standardwert Beispiel
Global Boolean Die Zeichenfolge bis zur ersten Übereinstimmung mit dem Muster (Falsch) oder im gesamten Text (Wahr) überprüfen Falsch

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "abc";
ИсходнаяСтрока = "abc 123 abc";
Результат = RegExp.Replace(ИсходнаяСтрока, "def"); // def 123 abc
RegExp.Global = Истина;
Результат = RegExp.Replace(ИсходнаяСтрока, "def"); // def 123 def
IgnoreCase Boolean Die Groß- und Kleinschreibung der Zeichen beachten (Falsch) oder ignorieren (Wahr) Falsch

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "АБВ";
ИсходнаяСтрока = "абв 123";
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // абв 123
RegExp.IgnoreCase = Истина;
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // где 123
MultiLine Boolean Mehrzeiliger (Wahr) oder einzeiliger (Falsch) Modus Falsch

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.Pattern = "^абв";
ИсходнаяСтрока = "абв 123 абв" + Символы.ПС + "абв";
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // где 123 абв
// абв
RegExp.Multiline = Истина;
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // где 123 абв
// где
Pattern String Das verwendete Muster – ein Textvorlage, die aus normalen Zeichen und/oder speziellen Metazeichen besteht

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "абв";
ИсходнаяСтрока = "абв 123";
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // где 123

3. Methoden.

Methode Beschreibung Rückgabewert Beispiel
Replace(Zeichenfolge, Unterzeichenfolge) Ersetzen von Vorkommen, die dem Muster (Eigenschaft Pattern) entsprechen, in der Originalzeichenfolge durch die angegebene Unterzeichenfolge Geänderte Zeichenfolge

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "абв";
ИсходнаяСтрока = "абв 123";
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // где 123
Test(Zeichenfolge) Überprüfung der Übereinstimmung mit dem Muster Boolean

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "абв+";
ИсходнаяСтрока = "абввввггг";
Результат = RegExp.Test(ИсходнаяСтрока); // Истина
ИсходнаяСтрока = "аввввггг";
Результат = RegExp.Test(ИсходнаяСтрока); // Ложь
Execute(Zeichenfolge) Suche nach dem Muster entsprechenden Vorkommen in der Originalzeichenfolge Sammlung der gefundenen Unterzeichenfolgen als Aggregatobjekt

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "абв+";
RegExp.Global = Истина;
ИсходнаяСтрока = "абв 123 абв абвв 456";
Matches = RegExp.Execute(ИсходнаяСтрока);
Для Счетчик = 0 По Matches.Count - 1 Цикл 
    Match = Matches.Item(Счетчик);
	// Найденное значение (подстрока) + Индекс первого символа найденной подстроки в строке-оригинале + Длина найденной подстроки
	Результат = Match.Value + ", " + Match.FirstIndex + ", " + Match.Length; // абв, 0, 3
// абв, 8, 3
// абвв, 12, 4
КонецЦикла;

4. Metazeichen.

Zeichen Beschreibung Beispiel
\ Zeigt an, dass das folgende Zeichen ein Sonderzeichen ist. Die Sequenz "\\" entspricht "\", und die Sequenz "\(" entspricht "(".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "^[A-Z]:\\$";
ИсходнаяСтрока = "C:\";
Результат = RegExp.Test(ИсходнаяСтрока); // Истина
^ Definiert den Anfang der Eingabezeichenfolge. Wenn die Eigenschaft Multiline festgelegt ist, definiert es auch die Position unmittelbar nach "\n" (Zeilenumbruch) und "\r" (Wagenrücklauf).

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.Pattern = "^абв";
ИсходнаяСтрока = "абв 123 абв" + Символы.ПС + "абв";
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // где 123 абв
// абв
RegExp.Multiline = Истина;
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // где 123 абв
// где
$ Definiert das Ende der Eingabezeichenfolge. Wenn die Eigenschaft Multiline festgelegt ist, definiert es auch die Position unmittelbar vor "\n" (Zeilenumbruch) und "\r" (Wagenrücklauf).

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.Pattern = "абв$";
ИсходнаяСтрока = "абв 123 абв" + Символы.ПС + "абв";
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // абв 123 абв
// где
RegExp.Multiline = Истина;
Результат = RegExp.Replace(ИсходнаяСтрока, "где"); // абв 123 где
// где
* Definiert null oder mehrere Vorkommen des vorangehenden Zeichens. Äquivalent zu {0,}.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "длинноше*";
ИсходнаяСтрока = "длинношеее";
Результат = RegExp.Test(ИсходнаяСтрока); // Истина
+ Definiert ein oder mehrere Vorkommen des vorangehenden Zeichens. Äquivalent zu {1,}.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "длинноше+";
ИсходнаяСтрока = "длинношеее";
Результат = RegExp.Test(ИсходнаяСтрока); // Истина
? Definiert null oder ein Vorkommen des vorangehenden Zeichens. Äquivalent zu {0,1}. Wenn dieses Metazeichen unmittelbar auf Konstruktionen (*, +, ?, {n}, {n,}, {n,m}) folgt, führt dies zu einer Änderung des Suchalgorithmus für das angegebene Muster, was im folgenden Beispiel veranschaulicht wird.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "000111000";
RegExp.Pattern = "0+";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
RegExp.Pattern = "0+?";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 6
{n} Definiert die genaue Anzahl der vorangehenden Zeichen. "n" ist eine nicht-negative ganze Zahl.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "000111001110000";
RegExp.Pattern = "0{3}";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
{n,} Definiert die Mindestanzahl der vorangehenden Zeichen. "n" ist eine nicht-negative ganze Zahl. "{0,}" ist äquivalent zu "*", und "{1,}" ist äquivalent zu "+".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "000111001110000";
RegExp.Pattern = "0{3,}";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
{n,m} Definiert die Anzahl der vorangehenden Zeichen (von - bis). "n" und "m" sind nicht-negative ganze Zahlen, wobei n <= m. "{0,1}" ist äquivalent zu "?".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "00011101110000";
RegExp.Pattern = "0{2,3}";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
. Definiert jedes Zeichen außer "\n" (Zeilenumbruch). Um jedes Zeichen einschließlich "\n" zu definieren, sollte "[\s\S]" verwendet werden.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "00" + Символы.ПС + "00";
RegExp.Pattern = ".";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 4
RegExp.Pattern = "[\s\S]";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 5
(Muster) Speichert das Übereinstimmungsergebnis des Musters in der SubMatches-Auflistung. Um die Zeichen "(" und ")" zu definieren, sollten "\(" und "\)" verwendet werden.

RegExp = Новый COMОбъект("VBScript.RegExp");
ИсходнаяСтрока = "One = 111" + Символы.ВК + "Two = 222" + Символы.ВК + "Three = 333";
// прочитаем параметр "Two"
RegExp.Pattern = "Two = (.+\r)";
Matches = RegExp.Execute(ИсходнаяСтрока);
Match = Matches.Item(0);
Результат = Match.Value; // Two = 222
Submatches = Match.Submatches;
Для Счетчик = 0 По Submatches.Count - 1 Цикл
	Результат = Submatches.Item(Счетчик); // 222
КонецЦикла;
(?:Muster) Nützlich zum Kombinieren von Musterbestandteilen mit dem "|" (ODER)-Zeichen. Zum Beispiel ist "gosp(?:din|ja)" kürzer als "gospodin|gospoja". Speichert die Übereinstimmung NICHT in der SubMatches-Auflistung.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "господин госпожа господа";
RegExp.Pattern = "госпо(?:дин|жа)";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
(?=Muster) "Windows(?=95|98)" stimmt mit der Teilzeichenfolge "Windows" in der Zeichenfolge "Windows95" überein, jedoch nicht in "WindowsNT". Die weitere Suche beginnt sofort, nicht nach den Zeichen in den Klammern. Speichert die Übereinstimmung NICHT in der SubMatches-Auflistung.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "WindowsWindowsWindows";
RegExp.Pattern = "Windows(?=Win)";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
Для Счетчик = 0 По Matches.Count - 1 Цикл
	Результат = Matches.Item(Счетчик).Value; // Windows
// Windows
КонецЦикла;
(?!Muster) "Windows(?!95|98)" stimmt mit der Teilzeichenfolge "Windows" in der Zeichenfolge "WindowsNT" überein, jedoch nicht in "Windows95". Ansonsten ist es vollständig analog zu "(?=Muster)".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "WindowsWindowsWindows";
RegExp.Pattern = "Windows(?!Win)";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
Для Счетчик = 0 По Matches.Count - 1 Цикл
	Результат = Matches.Item(Счетчик).Value; // Windows
КонецЦикла;
x|y ODER-Bedingung. "vz|peredvod" stimmt mit "vz" und "peredvod" überein. "(vz|pered)vod" stimmt mit "vzvod" und "peredvod" überein.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows Lindows Linux";
RegExp.Pattern = "(Wi|Li)ndows";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
[abc] Zeichensatz. Findet eines der angegebenen Zeichen.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows Lindows Linux";
RegExp.Pattern = "[WL]indows";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
[^abc] Ausschließender Zeichensatz. Findet eines der nicht angegebenen Zeichen.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows Lindows Linux";
RegExp.Pattern = "in[^uv]";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
[a-z] Zeichenbereich. Findet jedes Zeichen aus dem Bereich.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows Lindows Linux";
RegExp.Pattern = "[L-W]indows";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
[^a-z] Ausschließender Zeichensatz. Findet jedes Zeichen, das nicht in den Bereich fällt.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows Lindows Linux";
RegExp.Pattern = "[^A-K]indows";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
\b \B \b - Wortgrenze, d. h. die Position zwischen dem Ende eines Wortes und einem Leerzeichen. \B - KEINE Wortgrenze.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows Windows Windows98";
RegExp.Pattern = "ows\b";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
RegExp.Pattern = "ows\B";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\d \D \d - Ziffer. Entspricht [0-9]. \D - KEINE Ziffer. Entspricht [^0-9].

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "WindowsNT Windows2000 Windows98";
RegExp.Pattern = "Windows\d";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
RegExp.Pattern = "Windows\D";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\w \W \w - jedes Wortzeichen, einschließlich des Unterstrichs. Entspricht [A-Za-z0-9_]. \W - das Gegenteil von "\w". Entspricht [^A-Za-z0-9_].

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows® Windows2000 Windows98";
RegExp.Pattern = "Windows\w";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
RegExp.Pattern = "Windows\W";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\s \S \s - Leerzeichen. Entspricht [\f\n\r\t\v]. \S - kein Leerzeichen. Entspricht [^\f\n\r\t\v].

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "Windows Windows Windows98";
RegExp.Pattern = "Windows\s";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
RegExp.Pattern = "Windows\S";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\cx Steuerzeichen. Der Parameter "x" liegt im Bereich A-Z oder a-z. Zum Beispiel definiert "\cM" Control-M bzw. das Wagenrücklaufzeichen, "\cJ" ist ein Zeilenumbruch, "\cL" ein Seitenumbruch, "\cI" ein Tabulatorzeichen und "\cK" ein vertikales Tabulatorzeichen.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = Символы.ВК + Символы.ВК;
RegExp.Pattern = "\cM";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 2
\f Seitenumbruchzeichen. Entspricht "\x0c" und "\cL".
\n Zeilenumbruchzeichen. Entspricht "\x0a" und "\cJ".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = Символы.ПС;
RegExp.Pattern = "\n";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\r Wagenrücklaufzeichen. Entspricht "\x0d" und "\cM".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = Символы.ВК;
RegExp.Pattern = "\r";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\t Tabulatorzeichen. Entspricht "\x09" und "\cI".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = Символы.Таб;
RegExp.Pattern = "\t";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\v Vertikales Tabulatorzeichen. Entspricht "\x0b" und "\cK".

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = Символы.ВТаб;
RegExp.Pattern = "\v";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\xn Hexadezimaler ASCII-Code des Zeichens. Muss genau zwei Zeichen enthalten.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = Символы.Таб;
RegExp.Pattern = "\x09";
Matches = RegExp.Execute(ИсходнаяСтрока);
Результат = Matches.Count; // 1
\num Rückverweis auf vorherige festgelegte (gefundene) Teilzeichenfolgen-Übereinstimmungen (SubMatches). "num" ist eine positive ganze Zahl, die die Nummer der Übereinstimmung in der SubMatches-Sammlung angibt; die Zählung beginnt bei 1. Zum Beispiel definiert "(.)\1" zwei identische, aufeinanderfolgende Zeichen.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "0:0:1-2:3:3-2:2:1-4:5:5-7:7:8";
// найдём группы, в которых две последние цифры совпадают
RegExp.Pattern = "(\d)(:)(\d)(:)\3";
Matches = RegExp.Execute(ИсходнаяСтрока);
Для Счетчик = 0 По Matches.Count - 1 Цикл
    Match = Matches.Item(Счетчик);
	Результат = Match.Value; // 2:3:3
// 4:5:5
КонецЦикла;
\un Definiert ein Unicode-Zeichen anhand seines hexadezimalen Codes. "n" ist ein vierstelliger hexadezimaler Code.

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
ИсходнаяСтрока = "© Microsoft © Sun";
RegExp.Pattern = "\u00A9 Sun";
Matches = RegExp.Execute(ИсходнаяСтрока);
Для Счетчик = 0 По Matches.Count - 1 Цикл
    Match = Matches.Item(Счетчик);
	Результат = Match.Value; // © Sun
КонецЦикла;

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.

Kategorien: 1C