Регулярное выражение для определенного идентификатора в скобках - PullRequest
0 голосов
/ 08 ноября 2019

У меня мало уверенности, когда дело доходит до регулярных выражений. Запись этого в коде PHP.

Мне нужно иметь возможность отфильтровывать строки, которые следуют этому формату, где числа могут быть от 4 до 6 цифр (только числовые):

$input = "This is my string with a weird ID added cause I'm a weirdo! (id:11223)";

Iможно просто удалить последнее слово, найдя последнюю позицию пробела с помощью strrpos(); (похоже, ни у одного из них нет завершающего пробела из канала JSON), а затем использовать substr(); для его сокращения. Но я думаю, что более элегантным способом будет подстрока. Предполагаемый результат будет:

$output = trim(preg_replace('[regex]', $input));
// $output = "This is my string with a weird ID added cause I'm a weirdo!"

Таким образом, это регулярное выражение должно совпадать с квадратными скобками, а также id: part и любыми смежными числами, такими как:

(id:33585)
(id:1282)
(id:9845672)

Намерение использоватьpreg_replace() функция, чтобы удалить их из потока данных. Не спрашивайте меня, почему они решили включить идентификатор в строку описания ... Я тоже поражаюсь, почему это не отдельный столбец в фиде JSON.

1 Ответ

3 голосов
/ 08 ноября 2019

Попробуйте использовать шаблон \(id:\d+\):

$input = "Text goes here (id:11223) and also here (id:33585) blah blah";
echo $input . "\n";
$output = preg_replace("/\(id:\d+\)/", "", $input);
echo $output;

Это печатает:

Text goes here (id:11223) and also here (id:33585) blah blah
Text goes here  and also here  blah blah

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

...