Ищите лидирующие звездочки, используя регулярные выражения в Lua - PullRequest
2 голосов
/ 05 апреля 2019

Я пытаюсь выяснить, есть ли в строке 06 ведущих звездочек например, если строка имеет "****** abc", тогда передайте если строка имеет «* abc » или «** abc» или «*», то ошибка

Я пробовал это онлайн (https://www.lua.org/cgi-bin/demo)

s1 = "**"

if (string.match(s1, '^****$')) then
 print "pattern matches"
else
 print "pattern does not match"
end

Но, похоже, это не работает.

Ответы [ 2 ]

6 голосов
/ 05 апреля 2019

С Справочное руководство Lua 6.4.1 Шаблоны:

Класс символов: Класс символов используется для представления набора символов.При описании класса символов допускаются следующие комбинации:

x: (где x не является одним из магических символов ^ $ ()%. [] * + -?) Представляет сам символ x.

...

% x: (где x - любой не алфавитно-цифровой символ) представляет символ x.Это стандартный способ избежать магических персонажей.

То есть * магический персонаж.Который должен быть экранирован, если только он не используется в классе символов, таком как [*].

Шаблон, который соответствует любой строке, которой предшествуют ровно 6 звездочек, равен "^%*%*%*%*%*%*[^*]+"

[^*]+ гарантирует, что вашоставшаяся строка не содержит других звездочек.При сопоставлении хотя бы одного символа, не являющегося звездочкой.

[^ set]: представляет собой дополнение набора, где набор интерпретируется, как указано выше.

...

один символьный класс, за которым следует '+', что соответствует одному или нескольким повторениям символов в классе.Эти повторяющиеся элементы всегда будут соответствовать самой длинной последовательности;

1 голос
/ 05 апреля 2019

Lua не имеет регулярных выражений, потому что это легкий вес.Однако шаблон ниже соответствует тому, что вы пытаетесь выполнить.

s1 = "*******TEST"

if (string.match(s1, '^[*][*][*][*][*][*]')) then
 print "pattern matches"
else
 print "pattern does not match"
end
...