Как закончить регулярное выражение после нескольких строк, когда вы используете [\ s \ S] [duplicate]

Оператор == проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals() проверьте фактическое содержимое строки (значение).

Обратите внимание, что метод .equals() принадлежит классу Object (суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.

  • Случай 1
    String s1 = "Stack Overflow";
    String s2 = "Stack Overflow";
    s1 == s2;      //true
    s1.equals(s2); //true
    
    Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле.
  • Случай 2
    String s1 = new String("Stack Overflow");
    String s2 = new String("Stack Overflow");
    s1 == s2;      //false
    s1.equals(s2); //true
    
    Причина. Если вы создаете объект String с использованием ключевого слова new, ему выделяется отдельное пространство в куче.
51
задан eLRuLL 16 December 2017 в 23:32
поделиться

5 ответов

Сделайте .* неживым, добавив «?» после него:

Project name:\s+(.*?)\s+J[0-9]{7}:
72
ответ дан shA.t 15 August 2018 в 22:51
поделиться

Ну, ".*" - жадный селектор. Вы делаете его неживым, используя ".*?". При использовании последней конструкции механизм регулярных выражений на каждом шаге соответствует тексту в "." попытке сопоставления с тем, что происходит после ".*?". Это означает, что если, например, ничего не происходит после ".*?", то оно ничего не соответствует.

Вот что я использовал. s содержит вашу исходную строку. Этот код специфичен для .NET, но большинство вариантов регулярного выражения будут иметь что-то подобное.

string m = Regex.Match(s, @"Project name: (?<name>.*?) J\d+").Groups["name"].Value;
3
ответ дан Ani Menon 15 August 2018 в 22:51
поделиться

Я бы также рекомендовал вам экспериментировать с регулярными выражениями с помощью «Expresso» - это утилита - отличная (и бесплатная) утилита для редактирования и тестирования регулярных выражений.

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

Например, при создании своего регулярного выражения с использованием пользовательского интерфейса и выбирая «*», у вас есть возможность проверить флажок «Как можно меньше» и увидеть результирующее резум, а также проверить его поведение, даже если раньше вы не знакомы с не жадными выражениями.

Доступны для загрузки на их сайте: http://www.ultrapico.com/Expresso.htm

Экспресс-загрузка: http://www.ultrapico.com /ExpressoDownload.htm

1
ответ дан Hershi 15 August 2018 в 22:51
поделиться

Использование не-жадных кванторов здесь, вероятно, является лучшим решением, также потому, что оно более эффективно, чем жадная альтернатива: жадные совпадения обычно идут насколько это возможно (здесь, до конца текста!), а затем отслеживать назад символ после символа, чтобы попытаться совместить часть, идущую позже.

Однако рассмотрите вместо этого использование отрицательного символьного класса:

Project name:\s+(\S*)\s+J[0-9]{7}:

\S означает «все, кроме пробелов, и это это именно то, что вы хотите.

9
ответ дан JGFMK 15 August 2018 в 22:51
поделиться

(Название проекта: \ s + [AZ]: (?: \\ w +) +. [a-zA-Z] + \ s + J [0-9] {7}) (? =:)

Это будет работать для вас.

Добавление (?: \\ w +) +. [a-zA-Z] + будет более ограничительным, а не. *

0
ответ дан Shailendra 15 August 2018 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: