使用正则表达式提取文本的问题

时间:2009-08-07 11:02:12

标签: regex xor

我需要从以下代码行中提取

<label for="<%=foobar.bar %>">Password:</label>

<label for="foobar">Password:</label>

我需要提取foobar,我可以使用它:(?<=for=")[^"]+(?=("))来提取:

<%=foobar.bar %>

foobar

但我不想<%=.bar,如果我尝试创建(?<=for=")[^"]+(?=(")) | (?<=for="<%=)[^"]+(?=(")),那么它不起作用,因为包含<%=的标签符合这两个条件,我认为你不能使用XOR?这是否有人可以帮助我?

Merci:)

2 个答案:

答案 0 :(得分:1)

我认为最好不要创造超级正则表达式。通过几个步骤完成您的任务:

  1. 使用正则表达式提取<%=foobar.bar %>foobar (?<=for=")[^"]+(?=("))
  2. 检查结果是否与<%=([\w]+)\.bar\s*%>等正则表达式匹配。
  3. 如果匹配使用$1组,则使用步骤2的结果。
  4. 你得到foobar

答案 1 :(得分:0)

你可以试试这个:

(?<for="(<%=)?)[^" ]*(?=( %>)?")

假设您要捕获的内容从不包含空格。否则你可以尝试:

(?<for="(<%=)?)[^"]*?(?=( %>)?")

使用非贪婪形式的[^"]*