【问题标题】:help me to improve my existing regex code帮助我改进现有的正则表达式代码
【发布时间】:2011-09-14 18:49:39
【问题描述】:

我正在使用这个
/\{\$?([^# ]+)\#?([^ ]+)? ?([^|]+)?[ \|]?([^\}]+)?\}/
perl 兼容的正则表达式

用于匹配字符串,例如:
{$string#asdf#asdf can you hear me? |ucfirst|strtoupper}

输出这个:

Array
(
    [0] => {$string#asdf#asdf can you hear me? |ucfirst|strtoupper}
    [1] => string
    [2] => asdf#asdf
    [3] => can you hear me? 
    [4] => ucfirst|strtoupper
)

如果与PHP's preg_replace_callback 函数一起使用,

但使用像{$string#asdf#asdf can you hear me? ucfirst|strtoupper} 这样的字符串,它会输出这个:

Array
(
    [0] => {$string#asdf#asdf can you hear me? ucfirst|strtoupper}
    [1] => string
    [2] => asdf#asdf
    [3] => can you hear me? ucfirst
    [4] => strtoupper
)


你能按照你希望的方式改进它,以便它能够匹配如下字符串:
{$string#asdf#asdf can you hear me? ucfirst|strtoupper}(注意:“|”在 ucfirst 前面被删除)而不影响数组的结果。
(即输出应该和上面第一个打印的数组一样)

【问题讨论】:

    标签: regex


    【解决方案1】:

    此正则表达式字符串已与您提供的两个示例匹配。你到底想问什么?

    【讨论】:

    • 那张截图来自什么工具?
    • 来自this website,我不知道这个工具叫什么名字,但它非常好用
    【解决方案2】:

    不清楚您到底想要什么,但根据您指定的内容,这是我的最佳猜测:

    {\$([^#]*)#(\S*) (.*?) (\S*)}
    

    这将为匹配 1-4 提供以下内容

    1. 直到第一个#号为止
    2. 第一个 # 符号之后和下一个空格之前的所有内容
    3. #2 和 #4 之间的所有其他内容
    4. 最后一个不包含空格的字符串

    在示例中

    {$string#asdf#asdf can you hear me? ucfirst|strtoupper}
    

    我们有:

    1. 字符串
    2. asdf#asdf
    3. 你能听到我说话吗?
    4. ucfirst|strtoupper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2011-07-03
      • 2011-06-10
      相关资源
      最近更新 更多