0

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

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

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

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

<%=foobar.bar %>

foobar

但我不想<%=,或者.bar如果我尝试创建(?<=for=")[^"]+(?=(")) | (?<=for="<%=)[^"]+(?=("))它不起作用,因为包含的标签<%=同时满足这两个条件,我认为你不能使用 XOR?这是任何人都可以帮助我吗?

谢谢 :)

4

2 回答 2

1

我相信最好不要创建超级正则表达式。分几个步骤完成您的任务:

  1. 提取<%=foobar.bar %>foobar使用您的正则表达式(?<=for=")[^"]+(?=("))
  2. 检查结果是否匹配正则表达式,如<%=([\w]+)\.bar\s*%>.
  3. 如果确实使用$1了匹配组,否则使用步骤 2 的结果。
  4. 你得到 foobar
于 2009-08-07T11:07:35.057 回答
0

你可以试试这个:

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

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

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

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

于 2009-08-07T11:06:23.970 回答