In Visual Studio 2010, how do you search for text that is not within a single line comment?
Asked Answered
A

2

8

In Visual Studio 2010, how do you search for text that is not within a single line comment? E. G. how to find "bas" in:

foo bar bas

but not in

foo bar // bas

Note that it should find the line:

foo / bar / bas

(edit) And it should not find the line:

foo // bar bas
Adelaideadelaja answered 26/1, 2012 at 17:13 Comment(3)
Okay, so I asked this question just so I could refer back to my own answer. Unfortunately, I have to wait 8 hours to answer my own question. Visual Studio doesn't seem to have the typical look-ahead, look-behind constructs. It does have a similar zero-width negative assertion. The syntax is ~(x) which means the pattern does not match x at this point in the pattern. Using this contruct, I came up with this: ^(.~(//))*bas Which works really well, but won't match a line where // are the first two characters on the line. A version to fix that is: ^~(//)(.~(//))*basAdelaideadelaja
You asked a question just to answer it yourself?Gradey
So, did you post that comment because I already answered your question? :)Adelaideadelaja
A
6

Okay, so I asked this question just so I could refer back to my own answer.

Visual Studio doesn't seem to have the typical look-ahead, look-behind constructs. It does have a similar zero-width negative assertion. The syntax is ~(x) which means the pattern does not match x at this point in the pattern. Using this construct, I came up with this: ^(.~(//))*bas Which works really well, but won't exclude a line where // are the first two characters on the line. A version to fix that is: ^~(//)(.~(//))*bas

Adelaideadelaja answered 27/1, 2012 at 21:23 Comment(0)
P
6

In the Visual Studio Find dialog, try using this regular expression (make sure to select Use: Regular expressions in the Find options):

~(//[.:b]*)<bas>

This should find all occurrences of the word bas which are not preceded by //.

Note that the Visual Studio regex syntax is a bit different than the conventional syntax. You can find the reference HERE.

Pederasty answered 26/1, 2012 at 17:38 Comment(2)
This doesn't work in the example: foo // bar / bas where bas is in a comment, and so should not be found. Thanks for the answer, though, and for the link. Also, the < and > word boundaries probably aren't necessary, although it depends on what you want.Adelaideadelaja
For VS2012 users: "Visual Studio 2012 uses .NET Framework regular expressions to find and replace text. In Visual Studio 2010 and earlier versions, Visual Studio used custom regular expression syntax in the Find and Replace windows". Source: Using Regular Expressions in Visual StudioRubato
A
6

Okay, so I asked this question just so I could refer back to my own answer.

Visual Studio doesn't seem to have the typical look-ahead, look-behind constructs. It does have a similar zero-width negative assertion. The syntax is ~(x) which means the pattern does not match x at this point in the pattern. Using this construct, I came up with this: ^(.~(//))*bas Which works really well, but won't exclude a line where // are the first two characters on the line. A version to fix that is: ^~(//)(.~(//))*bas

Adelaideadelaja answered 27/1, 2012 at 21:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.