【问题标题】:regex to replace all from value - php正则表达式替换所有值 - php
【发布时间】:2011-05-10 11:51:56
【问题描述】:

您好,我需要提取名称以“message”结尾的输入值,并将整个内容替换为匹配项。它需要一个替代品。任何想法正则表达式是什么?

感谢您的帮助.. 干杯 -Jeremy

我尝试了很多,这是最后一个

模式 /.*?(message" value="(.*?)").*?/is

替换 $2

想要

The value specified for "Email" is already in use by another registered user

在

    <input type="hidden" name="cntnt01message" value="The value specified for &amp;quot;Email&amp;quot; is already in use by another registered user" />

对于这个内容

    <form id="cntnt01moduleform_1" method="post" action="http://www..com/account/registration.html" class="cms_form">
    <div class="hidden">
    <input type="hidden" name="mact" value="SelfRegistration,cntnt01,default,0" />
    <input type="hidden" name="cntnt01returnid" value="60" />
    <input type="hidden" name="cntnt01assign" value="CONT" />
    <input type="hidden" name="cntnt01returnid" value="60" />
    <input type="hidden" name="cntnt01input_username" value="s" />

    <input type="hidden" name="cntnt01input_Salon" value="s" />
    <input type="hidden" name="cntnt01input_Hairstylist" value="s" />
    <input type="hidden" name="cntnt01input_email" value="s@cableone.net" />
    <input type="hidden" name="cntnt01input_email_again" value="s@cableone.net" />
    <input type="hidden" name="cntnt01input_Firstname" value="s" />
    <input type="hidden" name="cntnt01input_Lastname" value="Bass" />
    <input type="hidden" name="cntnt01input_phone" value="208-s-s" />
    <input type="hidden" name="cntnt01input_Street" value="s21st ave" />
    <input type="hidden" name="cntnt01input_city" value="s" />
    <input type="hidden" name="cntnt01input_state" value="Idaho" />
    <input type="hidden" name="cntnt01input_zip" value="s" />
    <input type="hidden" name="cntnt01input_Description" value="" />
    <input type="hidden" name="cntnt01input_services" value="Color,Perm/Relaxer,Sisterlocks®,Braiding" />
    <input type="hidden" name="cntnt01orig_url" value="http://www..com/account/registration.html?mact=SelfRegistration,cntnt01,default,0&amp;amp;cntnt01returnid=60&amp;amp;cntnt01group=Platinum&amp;amp;cntnt01pkg=4" />
    <input type="hidden" name="cntnt01group_id" value="4" />
    <input type="hidden" name="cntnt01pkg" value="4" />
    <input type="hidden" name="cntnt01submit
    " value="" />

    <input type="hidden" name="cntnt01error" value="1" />
    <input type="hidden" name="cntnt01message" value="The value specified for &amp;quot;Email&amp;quot; is already in use by another registered user" />
    </div>

【问题讨论】:

  • 不确定解析 html 是否会有所帮助.. 它必须是 preg_replace ... 我需要的模式就是 .. tk
  • 我相信它会帮助:)而且它比使用正则表达式更可靠。
  • 你想替换什么?找到“消息”的完整行?
  • 我在 smarty 工作的问题是什么,所以我需要匹配输入的值,谁的名字以“消息”结尾,并使用回调来替换它。 smarty 是 {$foo|regex_replace:'/patteren/':'replace ie: $1'} 所以最后 $foo 是“为 &quot;Email&quot; 指定的值已被另一个注册用户使用" .. 哦,下面没有说明的是 $foo 是上面的整个 html 块。

标签: php regex smarty


【解决方案1】:

您在寻找.? (除换行符外的任何字符的 0 或 1)。我认为你应该寻找 [^"]+ 即:/message" value="([^"]+)"/is 并替换为 $1 (不知道为什么其他括号在那里,除非那是为了别的东西)。

【讨论】:

  • 不,那也不起作用..其他组在哪里匹配外部所以当我用回调替换时,整个质量都被替换了..这就是意图:)
  • 为什么要替换?你不能把匹配项放到一个新字符串中吗?
  • 我在 smarty 工作的问题是什么,所以我需要匹配输入的值,谁的名字以“消息”结尾,并使用回调来替换它。 smarty 是 {$foo|regex_replace:'/patteren/':'replace ie: $1'} 所以最后 $foo 是“为 &quot;Email&quot; 指定的值已被另一个注册用户使用" "
  • 噢噢! Smarty...我刚刚注意到单行模式修饰符。
  • 所以我看到这意味着您想用消息替换 everything。在这种情况下,开头和结尾的非贪婪 .*? 将不匹配任何内容,因为它们不必匹配。您可以通过将^ 放在开头并将$ 放在结尾来强制他们这样做,或者只使用贪婪的表达式,例如:/.*(message" value="(.*?)").*/is 或/^.*?(message" value="(.*?)").*?$/is,甚至/^.*(message" value="(.*?)").*$/is - 这是我唯一能解决的问题还是看看吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多