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

#php #regex #regular-language

Вопрос:

Мне нужно сопоставить эти два текста:

 Last dying gasp time : -

Last dying gasp time : 2021-08-13 18:27:44
 

То, что я пытался, это

  • Last dying gasp times :s [d-] s [d:]
  • Last dying gasp times :s [d-]
  • Last dying gasp times :s [d-] (s [d:] )?

Но это соответствует только одному или другому. Как я могу этого достичь?

Комментарии:

1. …или просто Last dying gasp times*:.* , если вы не разбираетесь в том, что следует за двоеточием.

Ответ №1:

Вы можете использовать это регулярное выражение:

 ^Last dying gasp timeh*:h*(?:-|d{4}(?:-d{2}){2}h d{2}(?::d{2}){2})$
 

Демонстрация регулярных выражений

Сведения о регулярном выражении:

  • ^ : Начало
  • Last dying gasp time : Совпадение текста Last dying gasp time
  • h*:h* : Совпадение : , окруженное 0 или более пробелами с обеих сторон
  • (?:-|d{4}(?:-d{2}){2}h d{2}(?::d{2}){2}) : Сопоставьте - строку даты и времени или
  • $ : Конец

Ответ №2:

Вы можете использовать ссылку на группу <n> , где <n> указана цифра, чтобы указать совпадение с предыдущим номером группы (номера групп были сопоставлены, поэтому вы не можете сделать так, чтобы они совпадали заранее).

 /(Last dying gasp time :).*n1.*/
 

сначала вы объединяете регулярное выражение в группу… затем вы сопоставляете остальную часть строки (это то, для чего .* она предназначена), затем вы сопоставляете n , а затем ссылаетесь на то , что было сопоставлено в этой первой группе 1 , за которой следует остальная часть строки ( .* ). Хорошо то, что вас не заставляют использовать фиксированную строку, поэтому вы можете получить все строки с одной и той же первой частью(и продемонстрировано в этой демонстрации).:

 (^[^:n] :).*(n1.*)*
 

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

 (^[^:n] :).*(n1.*)