Pruthvi@123 Ответов: 1

Регулярное выражение для следующего требования.


Я использую следующее регулярное выражение для соответствующей функции.

FINDFUNC_RE = re.search('^\s*(?:(?:inline|static)\s+){0,2}(?!else|typedef|return)\w+\s+\*?\s*(\w+)\s*\([^0]+\s*?', Line)


Он правильно соответствует, Если линия такая:
static int abc(int a)


Но это не соответствует, если строка такая(содержит * после возвращаемого типа):
static int* abc(int a)


Как правильно сопоставить обе строки?

Что я уже пробовал:

<pre>FINDFUNC_RE = re.search('^\s*(?:(?:inline|static)\s*+){0,2}(?!else|typedef|return)\w+\s+\*?\s*(\w+)\s*\([^0]+\s*?', Line)



Я добавил * в регулярное выражение, но оно не работает.

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Я добавил * в регулярное выражение, но оно не работает.

Согласно определению регулярного выражения, * это специальный символ в регулярном выражении, чтобы соответствовать ему, нужно избежать его как \*
Я получил его из оригинального регулярного выражения, пространство должно быть необязательным:
^\s*(?:(?:inline|static)\s+){0,2}(?!else|typedef|return)\w+\s+\*?\s*(\w+)\s*\([^0]+\s*?
                                                           ^^^
                                                           \s*


Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению:
Regexper[^]


Pruthvi@123

@Patrice T-в каком месте мне нужно добавить это, так как я пытался добавить его вот так(после static \s), как показано ниже:
Скрыть   скопировать код

FINDFUNC_RE = re.search('^\s*(?:(?:inline|static)\s*+\*){0,2}(?!else|typedef|return)\w+\s+\*?\s*(\w+)\s*\([^0]+\s*?', Line)

Хотя это не работает.А также он должен соответствовать обоим:
статический int abc(int a)
статический int* abc(int a)
Пожалуйста, Ответьте.Спасибо.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

У меня сейчас нет времени на регулярное выражение, начните с удаления*, которое вы добавили ранее.