小编Kai*_*lyn的帖子

正则表达式,匹配所有有效格式的IPv6地址

乍一看,我承认这个问题看起来像是这个问题的副本以及与之相关的任何其他问题:

与正确的IPv6地址匹配的正则表达式

事实上,这个问题的答案几乎可以回答我的问题,但并不完全.

我遇到的问题代码,但最成功的代码如下所示:

private string RemoveIPv6(string sInput)
{
    string pattern = @"(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))";
    //That is one looooong regex! From: https://stackoverflow.com/a/17871737/3472690
    //if (IsCompressedIPv6(sInput))
      //  sInput = UncompressIPv6(sInput);
    string output = Regex.Replace(sInput, pattern, "");
    if (output.Contains("Addresses"))
        output = output.Substring(0, "Addresses: ".Length);

    return output;
}
Run Code Online (Sandbox Code Playgroud)

我在答案中提供的正则表达式模式的问题,David M. Syzdek的答案,是它不匹配并删除我正在抛出的IPv6地址的完整形式.

我正在使用正则表达式模式主要用空格或空值替换字符串中的IPv6地址.

例如,

    Addresses:  2404:6800:4003:c02::8a
Run Code Online (Sandbox Code Playgroud)

以及...

    Addresses:  2404:6800:4003:804::200e
Run Code Online (Sandbox Code Playgroud)

最后......

    Addresses:  2001:4998:c:a06::2:4008
Run Code Online (Sandbox Code Playgroud)

所有这些都没有被正则表达式完全匹配,或者未能完全匹配.

正则表达式将返回字符串的其余部分,如下所示:

    Addresses:  8a

    Addresses:  200e

    Addresses:  2:4008
Run Code Online (Sandbox Code Playgroud)

可以看出,由于残余物所采用的格式不同,它已经留下了难以检测和删除的IPv6地址的残余.下面是正则表达式模式本身,以便更好地分析:

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是,如何更正此正则表达式模式以便它可以匹配,从而允许从不仅仅包含IPv6地址本身的字符串中完全删除任何IPv6地址?

或者,如何更正上面提供的代码段以提供所需的结果?

对于那些可能想知道的人,我从nslookup命令的StandardOutput获取字符串,并且IPv6地址将始终不同.对于上面的示例,我从"google.com"和"yahoo.com"获得了这些IPv6地址.

我没有使用内置函数来解析DNS条目是有充分理由的,我认为暂时不重要,因此我使用的是nslookup.

至于调用该函数的代码,如果需要,如下所示:(它本身也是另一个函数/方法,或者说是其中一部分)

string output = ""; …
Run Code Online (Sandbox Code Playgroud)

c# regex replace .net-4.0 winforms

11
推荐指数
1
解决办法
2935
查看次数

C#Microsoft Access参数化查询无法正常工作

我已经对此进行了研究,虽然下面的问题很相似,但我已经尝试了所有这些,但似乎都没有解决我的问题.

从Access数据库获取数据的正确方法

使用参数将数据插入访问数据库

通过单击按钮将数据从Access获取到C#中的文本框

Access数据库的UPDATE查询不能正常工作C#.NET

传递参数以从c#访问查询

用于插入值的参数化查询

以下是相关代码的一部分:

private void LoadDetails(int index)
{
    try
    {
        connection.Open();
        command = new OleDbCommand("SELECT * from tagsTbl WHERE ID=@1", connection);
        command.Parameters.AddWithValue("@1", index);
        reader = command.ExecuteReader();
        while (reader.Read())
        {
            nameTextBox.Text = reader["leName"].ToString();
            altTextBox.Text = reader["altName"].ToString();
            unitTextBox.Text = reader["currUnit"].ToString();
            tagTextBox.Text = reader["currTag"].ToString();
            oldTextBox.Text = reader["oldTag"].ToString();
            descTextBox.Text = reader["currDesc"].ToString();
        }
        connection.Close();
    }
    catch
    {
        connection.Close();
        MessageBox.Show(errortxt);
        Application.Exit();
    }
}

private void testWin_Load(object sender, EventArgs e)
{
    loadFileDialog.ShowDialog();
    connection = new OleDbConnection(strConn);
    if (!blnLoaded)
        Application.Exit();
    else
    {
        errortxt …
Run Code Online (Sandbox Code Playgroud)

c# oledb ms-access parameterized-query c#-4.0

5
推荐指数
1
解决办法
953
查看次数