【问题标题】:RegEx find string in string正则表达式在字符串中查找字符串
【发布时间】:2012-01-12 10:31:58
【问题描述】:

我可以使用正则表达式(插入子字符串)来获取字符串中的字符串吗?

我想从一系列 INSERT 语句中获取表名

INSERT INTO tableA VALUES (col1, col2, col3);
INSERT INTO tableB VALUES (col1, col2, col3);
INSERT INTO tableC VALUES (col1, col2, col3);

使用我想获得的正则表达式(我从文件中读取的单行):

tableA
tableB
tableC

我已经尝试使用这个表达式 (INTO )([a-z_])*,它给了我 'INTO tableA',我可以使用 SubString 或 Replace 来给我剩下的,但我猜这可以在 RegEx 中完成。

【问题讨论】:

  • 您使用什么语言?正则表达式功能因语言而异。

标签: c# .net regex


【解决方案1】:

将此正则表达式与lookbehind一起使用:

(?i)(?<=into\s+)\S+

var tables = Regex.Matches(s, @"(?i)(?<=into\s+)\S+")
    .Cast<Match>().Select(m => m.Value);

【讨论】:

  • 谢谢!像魅力一样工作!
【解决方案2】:

由于您使用的是 C#,我将指定从头到尾的操作方式:

        //create regex - the (.*?) is a capture group
        var regex = new Regex("INSERT INTO (.*?) VALUES");

        //mimic text lines read from a file
        var sqlStrings = new string[] {"INSERT INTO tableA VALUES (col1, col2, col3)", "INSERT INTO tableB VALUES (col1, col2, col3)", "INSERT INTO tableC VALUES (col1, col2, col3)"};
        foreach (var line in sqlStrings)
        {
            //get the first match with the regex we created
            var match = regex.Match(line);

            //print out the first capture group
            Console.WriteLine(match.Groups[1].ToString());
        }

这将写出以下内容:

tableA
tableB
tableC

不确定您的确切输入格式(是否换行)以及您希望如何输出它,但我希望这会有所帮助。

是的,这可以做得更简洁,但为了清楚起见,我将其拆分为多个行和方法。

【讨论】:

    【解决方案3】:

    使用文本编辑器和查找 + 替换如下:

    Find: ^INSERT INTO (.*) VALUES.*
    Replace: \1
    

    一定要选中Regular Expression 选项。

    这就是我的 Notepad++ 屏幕的样子,相信我,它确实有效。

    【讨论】:

      【解决方案4】:

      您可以使用括号从匹配的字符串中捕获子字符串:

      ^ *INSERT\s+INTO\s+(\w+)
      

      从匹配结果中,您可以根据您的语言使用\1$1 提取第一个捕获的组。

      *\s+ 将忽略多余的空格。

      【讨论】:

        【解决方案5】:

        在php中

        $regex = "/INSERT INTO (.*) VALUES/";
        

        在java中

        String regex = "INSERT INTO (.*?) VALUES";
        

        第一个捕获组将容纳您想要的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-11
          • 2016-07-26
          • 1970-01-01
          • 2021-09-15
          • 1970-01-01
          • 1970-01-01
          • 2017-07-04
          • 1970-01-01
          相关资源
          最近更新 更多