【问题标题】:C# how to read the apache vhosts fileC#如何读取apache vhosts文件
【发布时间】:2011-07-29 10:23:54
【问题描述】:

我正在尝试创建一个基本的 C# 应用程序来管理我的 Apache vHosts 文件,因此我不必编辑原始文件来设置新的 vhost

现在我正在尝试让正则表达式与 Vhosts 匹配,但这不起作用,有人会为我提供一个工作示例

这是我目前拥有的

StreamReader reader = new StreamReader(filePath);
string content = reader.ReadToEnd();
string regEx = "<VirtualHost .*>.*</VirtualHost>";
foreach (Match match in Regex.Matches(content, regEx, RegexOptions.IgnoreCase))
{
     MessageBox.Show(match.Value);
}

这会失败,但如果我使用 string regEx = "&lt;VirtualHost .*&gt;.*" 它的工作原理是返回打开的 vhosts 标签,但不会返回任何应该返回所有内容的内容

【问题讨论】:

    标签: c# regex vhosts


    【解决方案1】:

    试试这个作为你的正则表达式

    "<VirtualHost [^>]*>([^<]*)</VirtualHost>"
    

    编辑: 在[^&lt;]* 周围添加了圆括号,因此它会将标签之间的文本作为匹配项之一返回。

    【讨论】:

    • 感谢工作完美(你可以看到我仍然是一个正则表达式的菜鸟哈哈)
    • [^&lt;]* 如果里面有任何&lt;(这很常见,例如&lt;directory...),则内容将不起作用。 lazy-dot-star .*? 适合在这里使用。
    • 有没有办法让支持伙伴?
    • 根据@ridgeruner,它应该写成&lt;VirtualHost&gt;(.*?)&lt;/VirtualHost&gt;Lazy-dot-star,即.*? 使 dot 尽可能少地匹配。所以,如果你在 lazy-dot-star 之后写一些东西,在我们的例子中是 &lt;/VirtualHost&gt;,它将匹配所有内容,但不匹配 &lt;/VirtualHost&gt;,因为在 *lazy- 后面有一部分表达式点星,与之匹配。希望我的解释不是太复杂。 :)
    猜你喜欢
    • 2016-10-25
    • 2023-01-18
    • 1970-01-01
    • 2012-12-22
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多