PHP Удалить строку между [: en] [:] - PullRequest
0 голосов
/ 03 октября 2019

Как я могу удалить строку из квадратных скобок и сами скобки с помощью регулярных выражений?

Позвольте уточнить, не тот ли это случай: [какой-то текст], а вот этот:

Lorem ipsum[:en]Some text[:]

После "str_replace" переменная должна содержать только:

Lorem Ipsum

Кто-то может мне помочь? Я схожу с ума:)

Ответы [ 3 ]

0 голосов
/ 03 октября 2019

Использование:

\[.+?].+?\[.+?]

Объяснение:

\[      # openning square bracket
.+?     # 1 or more any character, not greedy
]       # closing square bracket
.+?     # 1 or more any character, not greedy
\[      # openning square bracket
.+?     # 1 or more any character, not greedy
]       # closing square bracket

Код:

$text = 'Lorem ipsum[:en]Some text[:] Lorem ipsum[:en]Some text[:] Lorem ipsum';
echo preg_replace('/\[.+?].+?\[.+?]/', '', $text);

Вывод:

Lorem ipsum Lorem ipsum Lorem ipsum
0 голосов
/ 03 октября 2019

Вы можете использовать ~\[:\w{2}\].*?\[:\]~ в качестве регулярного выражения.

Код:

$str = "Lorem ipsum [:en]Some text[:] dolor [:en]sit amet[:]";
$new_str = trim(preg_replace(['~\[:\w{2}\].*?\[:\]~', '~\s\s+~'],[' ', ' '], $str));
echo $new_str;

// besides running the regex, this also takes care of multiple whitespaces and whitespaces at the begin and end.

Преобразуется Lorem ipsum [:en]Some text[:] dolor [:en]sit amet[:] в Lorem ipsum dolor Это будет соответствовать толькочто между [:XX] и [:] (где XX - два алфавитно-цифровых символа). Это означает, что Lorem [foobar] ipsum [baz] останется как есть и не изменится (как мне кажется, это то, что вы ищете.

Примеры:

Input: "Lorem ipsum [:en]Some text[:] dolor [:en]sit amet[:]"
Output: "Lorem ipsum dolor"
Input: "Lorem ipsum[:en]Some text[:] dolor[:en]sit amet[:]"
Output: "Lorem ipsum dolor"
Input: "Lorem [foobar] ipsum [baz]"
Output: "Lorem [foobar] ipsum [baz]"

Смотрите это в действии!

Объяснение:
\[:\w{2}\].*?\[:\]

\[    # matches the character [ literally (case sensitive)
:     # matches the character : literally (case sensitive)
\w{2} # matches any word character (equal to [a-zA-Z0-9_])
  {2} # Quantifier — Matches exactly 2 times
\]    # matches the character ] literally (case sensitive)
.*?   # matches any character (except for line terminators)
 *?   # Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)
\[    # matches the character [ literally (case sensitive)
:     # matches the character : literally (case sensitive)
\]    # matches the character ] literally (case sensitive)
0 голосов
/ 03 октября 2019

Попробуйте удалить между [] из строки.

 $str = "Lorem ipsum[:en]Some text[:]";
   $new_str = preg_replace('`\[[^\]]*\]`',' ',$str);

   echo $new_str;

ВЫХОД

Lorem ipsum Some text

DEMO

...