Регулярное выражение с = и а; - PullRequest
14 голосов
/ 16 февраля 2010

Я пытаюсь использовать регулярное выражение, чтобы найти все подстроки, которые начинаются со знака равенства (=) и заканчиваются точкой с запятой (;) с любым количеством символов между ними. Должно быть что-то вроде этого =*;

По какой-то причине равные не регистрируются. Есть ли какой-нибудь экранирующий символ, который заставит регулярное выражение заметить мой знак равенства?

Я работаю на Java, если это имеет какое-то отношение к этому вопросу.

Ответы [ 5 ]

20 голосов
/ 16 февраля 2010

Это может быть то, что вы ищете. Вам необходимо указать набор символов или подстановочный знак, к которому вы применяете звездочку.

"=([^;]*);"

Вы также можете использовать квантификатор с неохотой:

"=(.*?);"

Используя скобки, теперь у вас есть группы. Я считаю, что первая группа - это целое совпадение, а group[1] - это группа, найденная в скобках.

Код может выглядеть примерно так:

Regex r = new Regex("=([^;]*);");
Match m = r.Match(yourData);
while (m.Success) {
    string match = m.Groups[1];
    // match should be the text between the '=' and the ';'.
}
6 голосов
/ 16 февраля 2010

Это ищет "любое количество знаков =, включая 0"

=*;

Если вы хотите "=, за которым следует любое количество других символов", вы хотите

=.*;

Однако, это будет соответствовать жадно - если вы хотите ленивое соответствие (так, чтобы оно останавливало одну группу, когда оно находит следующую точку с запятой), вы можете захотеть:

=.*?;
1 голос
/ 16 февраля 2010

Отличный источник для изучения регулярных выражений в Java: Книга Солнца о регулярных выражениях

1 голос
/ 16 февраля 2010

Что-то вроде =. *;

1 голос
/ 16 февраля 2010

Указанное вами регулярное выражение будет соответствовать ;, ===;, ..., ================;. Как насчет =.*; (или =.*?;, если нужен не жадный)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...