Регулярное выражение для начинающих - PullRequest
1 голос
/ 18 января 2010

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

Регулярные выражения должны соответствовать следующему:

File.f
File-1.f

в обоих случаях он должен возвращать то, что было до . или - во 2-м случае (File).

Я ценю помощь.

Спасибо

Ответы [ 4 ]

5 голосов
/ 18 января 2010

Это должно сделать:

^[^\.\-]+

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

1 голос
/ 18 января 2010

Я не знаю, какой язык вы используете, но все они работают в основном одинаково. В C # мы бы сделали что-то вроде следующего:

List<string> files = new List<string>() {
    "File.f",
    "File-1.f"
};
Regex r = new Regex(@"^(?<name>[^\.\-]+)");
foreach(string file in files) {
    Match m = r.Match(file);
    Console.WriteLine(m.Groups["name"]);
}

Именованная группа позволяет вам легко извлечь префикс, который вы ищете. Вышеуказанные отпечатки

File
File

на консоли.

Я настоятельно рекомендую вам взять книгу Освоение регулярных выражений . Каждый программист должен быть знаком с регулярными выражениями, и книга Фридла, безусловно, лучшая по этому вопросу. Он имеет отношение к Perl, Java, .NET и PHP в зависимости от вашего выбора языка.

1 голос
/ 18 января 2010
^([^.-]+).*\.f$

Первый ^ означает начало строки

() означает группу - это часть, которая захватывается и возвращается в качестве первой группы (в зависимости от вашего языка это $1, \1 или groups()[0] или group(1)

[] означает один из этого набора символов

[^ означает набор , а не , содержащий эти символы, т.е. это «все символы, но не те, которые я перечисляю», в отличие от [], что означает «нет символов» но только те, которые я перечисляю "

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

. это «любой» одиночный символ

* повторяется от 0 до бесконечности раз.

\. означает символ . (потому что. Особенный)

f это просто буква f (или слово f на самом деле)

$ - конец строки.

0 голосов
/ 18 января 2010

Я согласен, что у Кимвайса есть действительно солидный ответ (я не могу голосовать так извините)

Я написал его в Perl, прежде чем я прочитал их ответ, я придумал это:* $ string1 = "John.f";$ string2 = "Eric-1.f";

$ string1 = ~ m / ^ ([0-9a-zA-Z] +) [.-] / i;выведите $ 1."\ n \ n \ n";

$ string2 = ~ m / ^ ([0-9a-zA-Z] +) [.-] / i;

print $ 1."\ П \ п \ п";

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

Удачи

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