【问题标题】:Substring or regular expression in PHPPHP中的子字符串或正则表达式
【发布时间】:2011-03-05 08:54:21
【问题描述】:

我有以下字符串:

\r\n-----------------------------7dbbb1a140240\r\nContent-Disposition: form-data; **name="pceq"\r\n\r\n10154**

我将如何提取 name 之后引用中的所有内容并提取 \r\n\r\n 之后的所有内容。所以我只想提取 pceq10154

顺便说一句,这个字符串中唯一静态的就是“破折号”和“\r\nContent-Disposition: form-data;”我不太在乎,我只关心名称 (pceq) 之后的任何内容,并且只关心 (10154)。

非常感谢您的帮助。

更新:

我把星星去掉了(这意味着他们要加粗)。

\r\n-----------------------------7dbbb1a140240\r\nContent-Disposition: form-data; name="pceq"\r\n\r\n10154

我喜欢@user635522 和@diEcho 的方法。两个答案相等吗?意思是他们会给出相同的结果?

我忘记提到的另一件事是,我想用一个空字符串(“”)替换我提到的整个字符串。所以像 preg_replace 或 replace 之类的东西我想我需要用它来清空它?这样做的方法是什么?非常感谢所有回答的人。

【问题讨论】:

  • 我想你用 ** 来使名字加粗
  • 是的,我认为它会使代码加粗并强调它。

标签: php replace preg-replace preg-match


【解决方案1】:

如果字符串存储在 $var 中,我会更喜欢使用 preg_match

preg_match('/name="(.*)"\r\n\r\n(.*)/', $var, $matches);
echo $matches[1]; // name
echo $matches[2]; // numbers

【讨论】:

    【解决方案2】:

    我会为此使用 strpos

    $searchstr; // the string to be searched
    
    $first = substr($searchstr,strpos($searchstr,"name=")+5,strpos($searchstr,'"\r\n"));
    $second = substr($searchstr,strpos($searchstr,"\r\n\r\n")+8); // offset here might be 4?
    

    【讨论】:

      【解决方案3】:

      不要使用 /"(.*)"/ 匹配 name 属性的值,因为这将匹配它可以找到的第一个和最后一个 " 之间的任何内容,包括其他 "。

      更好的方法是使用否定字符类,如下所示:/"[^"]*"/

      【讨论】:

        【解决方案4】:

        试试这个

        preg_match('/^name="(.*)"\r\n\r\n(.*)/', $var, $matches);
        echo $matches[1]; // name
        echo $matches[2]; // numbers
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-26
          • 1970-01-01
          相关资源
          最近更新 更多