帮助我改进现有的正则表达式代码

时间:2011-09-14 18:49:39

标签: regex

我正在使用此/\{\$?([^# ]+)\#?([^ ]+)? ?([^|]+)?[ \|]?([^\}]+)?\}/
与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前删除“|”)而不影响数组的结果。
(即输出应与上面第一个打印的数组相同)

2 个答案:

答案 0 :(得分:0)

此正则表达式字符串已匹配您提供的两个样本。你在这里问的是什么?

答案 1 :(得分:0)

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

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

这将为比赛1-4提供以下内容

  1. 第一个#符号
  2. 的所有内容
  3. 第一个#符号之后和下一个空格之前的所有内容
  4. #2和#4之间的其他所有内容
  5. 不包含空格的最后一个字符串
  6. 在示例中

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

    我们有:

    1. 字符串
    2. ASDF#ASDF
    3. 你能听见我吗?
    4. ucfirst | strtoupper