【问题标题】:PHP Remove string between [:en] [:]PHP 删除 [:en] [:] 之间的字符串
【发布时间】:2019-10-03 10:11:56
【问题描述】:

如何使用正则表达式从方括号和括号本身之间删除字符串?

让我澄清一下,不是那种情况:[一些文字]而是这个:

Lorem ipsum[:en]Some text[:]

在“str_replace”之后,变量应该只包含:

Lorem Ipsum

有人可以帮助我吗?我要疯了:)

【问题讨论】:

  • $string = "Lorem ipsum[:en]Some text[:]"; $newString = explode("[",$string); echo $newString[0] 相当于 "Lorem Ipsum";
  • @marco 添加您的预期输出。
  • 你试过什么?什么没用?你得到了什么?你期待什么?什么不适用于您的代码,它在哪里?
  • 对不起@VaibhaviSojitra 和 Toto,我是 Stackoverflow 的新手。预期的输出只是“Lorem Ipsum”,下次我会更好地解释我的问题!
  • @macro 查看我的答案演示链接

标签: php regex wordpress qtranslate-x


【解决方案1】:

用途:

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

说明:

\[      # 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

【讨论】:

    【解决方案2】:

    尝试从字符串中删除 [] 之间的内容。

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

    输出

    Lorem ipsum Some text
    

    DEMO

    【讨论】:

    • Lorem ipsum[:en]Some text[:] Lorem ipsum[:en]Some text[:] Lorem ipsum这样的多个标签呢
    • 不,它没有。它只保留第一部分。
    • 我也试过了,请在这里查看演示paiza.io/projects/BM0mPleRSOHt0gaHRN6kgg?language=php
    • 这有多个问题。首先,您可能在* 之前错过了.,所以我认为它应该是:'~\[[^\]].*\]~' 现在正如@Toto 指出的那样,它很贪婪,因此它会改变“Foo [:en]Bar[: ] Baz [:en] Foobar[:]" 改为 "Foo" 而不是 "Foo Baz"。此外,它还会将“Foo [bar] baz [bar]”更改为“Foo”,而它只适用于 [:XX]...[:]
    • 如果我在 * 之前添加 . 它只返回第一个值。您可以查看演示链接@wawa
    【解决方案3】:

    您可以使用~\[:\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] 将保持原样而不被更改(我猜,这就是您要寻找的。​​p>

    示例:

    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]"
    

    See it in action!

    说明:
    \[:\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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-04
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多