[英]What regex to use in C# to start matching from a word BEHIND (matching backwards...) until a match?
让我们说一段 HTML 代码:
<a href="http://google.com">this is a search engine</a>"
如何寻找“引擎”并匹配任何东西,直到达到“这个”?
我知道我可以这样做: this.*?engine
- 但这是从左到右匹配,即“向前”匹配,如果这可能的话,我想在这里向后阅读?
您可以反转所有字符串并执行正常搜索:
string text = @"<a href=""http://google.com""> this is a search engine </a>";
string engine = "engine";
string strThis = "this";
new string(
Regex.Match(
new string(text.Reverse().ToArray()),
new string(engine.Reverse().ToArray()) + ".+" + new string(strThis.Reverse().ToArray()))
.Value
.Reverse()
.ToArray())
此外,为了使代码更清晰,您可以在string
上定义扩展方法,它反转 string 并返回string
而不是IEnumerable<char>
。 请参阅此以供参考。
首先,始终使用专用工具解析 HTML,请参阅在 C# 中解析 html 的最佳方法是什么? 对于可能的选择。
解析 HTML 后,您可以获得纯文本来运行您的正则表达式。
您仍然可以使用this.*?engine
regex但启用RegexOptions.RightToLeft
选项,可能与RegexOptions.Singleline
结合使用以匹配两个单词之间的任何字符:
var result = Regex.Match(text, @"this.*?engine", RegexOptions.Singleline | RegexOptions.RightToLeft)?.Value;
请参阅在线正则表达式演示。
根据文档, RegexOptions.RightToLeft
获取一个值,该值指示正则表达式是否从右向左搜索。
var text = "blah blah this is a this search engine blah";
var result = Regex.Match(text, @"this.*?engine",
RegexOptions.Singleline | RegexOptions.RightToLeft)?.Value;
Console.WriteLine(result); // => this search engine
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.