Multi-line regular expressions in Visual Studio

后端 未结 7 880
庸人自扰
庸人自扰 2021-01-30 09:58

Is there any way to get Visual Studio to perform a regex replace across multiple lines (let the match cross line boundaries)? I know there are many editors I can use for this, b

相关标签:
7条回答
  • 2021-01-30 10:33

    For everyone coming here while searching for VS Code, I use this to match anything from script to anywhere with 2 newlines (newlines excluded):

    script(.|\n)+?(?=\n\n)
    

    replace script and \n\n to match everything between them.

    0 讨论(0)
  • 2021-01-30 10:36

    Note: this answer is using the regex syntax used in Visual Studio up to and including VS 2012. In VS 2013 and later, the regex syntax has changed.

    You can include \n in the expression. As an example, here is a regex that I use to "clean" auto-generated SQL scripts from anything that is not a stored procedure (it will match text blocks that start with a line containing "Object: " followed by something that is not "StoredProcedure", then matching the following lines up to a line consists of the word "GO"):

    /\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
    
    0 讨论(0)
  • 2021-01-30 10:44

    This works today in Visual Studio 2012:

    fooPatternToStart.*(.*\n)+?.*barPatternToEnd
    

    See how the (.*\n)+? part does the match across multiple lines, non-greedy.
    fooPatternToStart is some regex pattern on your start line, while barPatternToEnd is your pattern to find on another line below, possibly many lines below...

    Example found here.

    Simple and effective :)

    Note: before VS2012, the pattern that worked was: fooPatternToStart.(.\n)+@.*barPatternToEnd

    0 讨论(0)
  • 2021-01-30 10:46

    Non-greedy multi-line any character capture, Visual Studio 2013+:

    .*?\r?\n.*?
    

    Greedy version in Giles Roberts's answer.

    0 讨论(0)
  • 2021-01-30 10:48

    Regular expressions have changed in Visual Studio 2013. https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx

    To match an expression over two lines the code would now be:

    StartOfExpression.*\r?\n.*EndOfExpression

    0 讨论(0)
  • 2021-01-30 10:49

    you may need to use \r\n at the end of your expression.

    0 讨论(0)
提交回复
热议问题