Регулярное выражение для получения частей строки - PullRequest
2 голосов
/ 08 февраля 2020

Я хочу заменить «после 10 часов» или «после 10 часов» на пустые ... Переменная $ task_modified должна выводить только «напоминать мне что-то сделать», однако с текущим кодом, который она печатает », напоминать мне делать что-то с "

" s "в строке не требуется .... это происходит из-за регулярного выражения. "/ after \ s (\ d +) \ shour /"

независимо от того, один час или 10 часов, мне не нужны дополнительные "s"

<?php

$task = "remind me to do something after 10 hours";

if (preg_match("/after\s(\d+)\shour/", $task, $matches) === 1) {
    $hour_after = $matches[1];
    $time_24hr = date('H:i:s',strtotime("+".$hour_after." hours"));

    $task_modified = str_replace($matches[0],"",$task_modified);
}

это то, что я пытался ... но не работает:

/after\s(\d+)\s[hour|hours]/

Ответы [ 2 ]

2 голосов
/ 08 февраля 2020

Этого можно добиться, используя ПОЗИТИВНО LOOKAHEAD

$task = "remind me to do something after 10 hours";
preg_match('/(.*)(?=\safter\s(\d+)\s)/mui', $task, $matches);

echo $matches[1]; // remind me to do something
echo $matches[2]; // 10
0 голосов
/ 08 февраля 2020

Вы можете использовать preg_replace без дополнительных ссылок:

\h+after\h+\d+\h+hours?$

Пояснение

  • \h+after\h+ Совпадение after между 1 + горизонтальные пробельные символы
  • \d+\h+ Совпадение 1+ цифр и 1+ горизонтальные пробельные символы
  • hours? Совпадение hour с необязательным s
  • $ Конец строки

Regex demo | Php демо

$re = '/\h+after\h+\d+\h+hours?$/m';
$task = 'remind me to do something after 10 hours';
$task_modified = preg_replace($re, '', $task);
echo $task_modified;

Выход

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