regex — PHP удаляет все вхождения строки в строку

У меня был большой PDF. Я преобразовал это в стол. Поскольку это была бесплатная программа, она плохо работала. Мои клетки выглядят так:

 ---------------------------------------
| bb.M2.u4.F5  bb.M2.u4.F5  bb.M2.u4.F5 |
---------------------------------------

Когда это должно выглядеть так (обратите внимание на пробел):

 -----------
|bb.M2.u4.F5|
-----------

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

Как мне этого добиться?

$my_string = " bb.M2.u4.F5  bb.M2.u4.F5  bb.M2.u4.F5 ";

$my_string = WhatFunctionCanIUseAndHow($my_string) // Would echo this: bb.M2.u4.F5

Как?
Постскриптум повторное возникновение может произойти менее или более 4 раз. Никогда не знаешь.

0

Решение

Нет необходимости в регулярных выражениях. Просто разделите пробел и возьмите первый элемент с индексом 0. Также используйте trim() обрезать пространство перед взрывом.

$my_arr = explode(" ", trim($my_string));
echo $my_arr[0]; // bb.M2.u4.F5
1

Другие решения

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

$my_string = ' bb.M2.u4.F5  bb.M2.u4.F5  bb.M2.u4.F5 ';
$my_string = preg_replace('/ *(\b\w+\b)\.? *(?=.*\b\1\b)/', '', $my_string);
//=> bb.M2.u4.F5

Это регулярное выражение захватывает группу символов слова, используя (\b\w+\b) а затем использует взгляд (?=.*\b\1\b) чтобы убедиться, что то же слово существует в строке.

Замена только с пустой строкой.

RegEx Demo

0