获取除某些符号(regexp)之外的文本值

时间:2014-07-30 19:55:06

标签: regex

如何获得除;符号以外的输入值?

正则表达式:

\<[a-z]+ .*value=([^;]+).* \/\>

文本:

<input type="hidden" name="pic" value=";10giddw" />

提前致谢。

2 个答案:

答案 0 :(得分:1)

标准答案是“使用解析器”。对于正则表达式,有三种选择。

选项1:Perl中的\K,PCRE(PHP,R,Notepad ++),Ruby 2 + ......

value=";\K[^"]+

\K告诉引擎放弃与其返回的最终匹配相匹配的内容。

选项2:在上方和大多数其他引擎中看待后方

(?<=value=";)[^"]+

lookbehind (?<=value=";)断言当前位置之前的位置是value=";,但与之不匹配。

选项3:在JavaScript(以及所有其他引擎)中捕获组

value=";([^"]+)

括号将值捕获到第1组。

答案 1 :(得分:1)

我认为您正在寻找的正则表达式是捕获value属性的内容但不包括分号(;)的正则表达式,因此您需要类似

的内容
"<.+value=\"([^;]*?)(?:;([^;]*?))?\".*\/>"g

Demo on RegEx101

重要位的说明:

  • ([^;]*?)懒惰地捕获任何非分号字符,这意味着它会在第一时间停止。
  • (?:;([^;]*?))?包含以下内容的非捕获组:
    • ;匹配分号
    • ([^;]*?)另一个非分号字符的懒惰捕获组
    • ?整个群组都是可选的。它可以存在,也可以不存在。

除了分号之外,这两个组捕获value之后引号之间的所有字符。请注意,如果value属性中有多个分号,则无法以当前形式运行。