views:

383

answers:

2

This question got me thinking in a regex for matching javadoc comments that include some specified text.

For example, finding all javadoc fragments that include @deprecated:

/**
* Method1
* .....
* @deprecated
* @return
*/

I manage to get to the expression /\*\*.*?@deprecated.*?\*/ but this fails in some cases like:

/**
* Method1
* .....
* @return
*/
public int Method1() { } 

// this method should be @deprecated
public void Method2() { }    

/**
* Method3
* .....
* @return
*/
public int Method3() { }

where it matches all the code from the 1st javadoc fragment until the 3rd javadoc fragment.

Can someone give a regex for this?

A: 

method2() does not have a javadoc comment and is therefor not deprecated (though the comment states it should be).

Also, if you want to extract information from the javadoc comments I’d recommend looking into the javadoc tool and writing a Doclet. You have easy access to all the information from the javadoc comment from there.

Bombe
Bombe, I just chose the string "@deprecated" as I might have chosen "bla". That is not the point. Also, I cannot use an external tool because this expression is to incorporate in the eclipse search dialog. See the related question.
bruno conde
+3  A: 

Try this one :

/\*\*([^\*]|\*(?!/))*?@deprecated.*?\*/
Diadistis
This seems to do the job. Thanks.
bruno conde
I would use (?!/) instead of [^/]. Otherwise it won't match if the space before the "@" is missing, ie, "*@deprecated".
Alan Moore
Very good point :)
Diadistis