【问题标题】:Quick Regex Question快速正则表达式问题
【发布时间】:2011-05-16 09:58:04
【问题描述】:

有人可以给我看一个匹配所有内容的正则表达式,例如:image.php?type=regcheck&imagehash=3d600fe2ad3c87c9b22ade7e58ef1c48

此字符串包含在页面源中.. 谢谢。 :)

编辑:这里是它所在的地方:

<img id="imagereg" src="image.php?type=regcheck&amp;imagehash=3d600fe2ad3c87c9b22ade7e58ef1c48" alt="Registration Image" border="0" height="61" width="201">

【问题讨论】:

  • 到目前为止你有什么?您使用的是哪种引擎/环境?你希望人们做你的工作吗?
  • 1.不要使用正则表达式解析 (X|X?HT)?ML。使用工作解析器。如果它物有所值,它还可以让您更轻松地抓取页面。 2. 您的规格不存在。 .* 与您的示例相匹配,但这不是您想要的。 3. 见卢塞罗。
  • 字符串的哪一部分是可变的?您要保存或更改哪一部分?
  • 试试image.php\?type=regcheck&amp;imagehash=3d600fe2ad3c87c9b22ade7e58ef1c48.*
  • 好吧,如果花 2 个小时,您实际上可能会学到一些东西,所以这不太可能浪费时间。在任何情况下,在提出问题或开始编码之前,您都必须明确说明问题(例如,真正知道自己想做什么)。

标签: c# html regex url


【解决方案1】:

如果哈希是唯一变化的东西,则将其替换为.*,并使用\ 转义所有现有的.?,因为它是一个正则表达式特殊字符......所以,类似于:

image\.php\?type=regcheck&imagehash=.*

另请注意,.* 可能“贪婪”并占用过多输入 - 我不知道您使用正则表达式解析什么(文本的某些部分会有所帮助),但后面可能有一个空格明星会成功的......

编辑:根据您的评论,正则表达式归结为:

"image\.php\?type=regcheck&imagehash=.*"

" 属于 inside 正则表达式,如:

 string regexExpression = "\"image\.php\?type=regcheck&imagehash=.*\""

【讨论】:

  • 这里是图片所在的文字: 编辑:看第一篇文章这有帮助吗? :)
  • 嗯。谢谢到目前为止。 ;) 但到目前为止,这个正则表达式对我来说不匹配任何东西.. /:
  • 注意 - 他的例子有 & 号实体 & .这可能是不匹配的原因。
  • 是的,你是对的。我试着把 &进入正则表达式,但我仍然不匹配任何东西..
【解决方案2】:

我认为你需要一个解析器,但由于你没有指定任何语言,这里有一个正则表达式来匹配它。

我不确定您是仅尝试匹配 imagehash 还是匹配 src 下的整个字符串。

所以我假设,您正在尝试匹配src 下的字符串:

<img id="imagereg" src="(.*?)" alt="Registration Image" border="0" height="61" width="201">

上述正则表达式会将src 值与altborder 等属性匹配。但如果你想匹配 all img 标签中的 all src 值:

<img.*?src="(.*?)".*?>

在 Python 中,您可以执行 m = re.search( .. ) 并通过 m.group(1) 返回组。 在 Perl 中 $source =~ / .. / 返回匹配组:$1

对于 & 符号,最好替换它,例如在 Perl 中:

$string =~ s/&amp;/&/g;

Python:

string.replace('&amp;', '&')

【讨论】:

  • 谢谢。 :) 但我指定了一种语言 - C#,是的,我不想只为这个匹配使用解析器..
  • @OmegaVirus:对于有限的已知 HTML,您实际上并不需要解析器。对于这样的问题,一个好的正则表达式可以很好地工作。只有当您开始构建处理未知 HTML 的所有一般突发事件时,才值得权衡。
  • 不幸的是,我在您的问题中没有看到任何C#,您可能需要重新标记它。 :)
  • @OmegaVirus,如果您想要特定语言的狭窄解决方案,您应该编辑问题中的标签以指定它。我认为您应该同时添加ʜᴛᴍʟᴄ♯。我不确定你真的需要ᴜʀʟ 标签。
猜你喜欢
  • 1970-01-01
  • 2016-01-15
  • 2011-12-24
  • 1970-01-01
  • 2020-06-08
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
相关资源
最近更新 更多