Вы можете использовать ~\[:\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)