0

我正在尝试在 Objective-C 中的字符串中查找和处理“java-style”注释。

我有一些几乎可以工作的正则表达式片段,但我遇到了一个障碍:不同的选项似乎使不同的样式起作用。

例如,我使用它来匹配:

NSArray* matches = [[NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionAnchorsMatchLines error:nil] matchesInString:string options:0 range:searchRange];

此处的选项允许我成功查找和处理单行注释 (//) 但不是多行注释 (/* */),如果我将选项更改为NSRegularExpressionDotMatchesLineSeparators那么我可以使多行工作正​​常但我找不到“结束”的单行注释。

我想我真的需要点匹配行分隔符,但我需要一种更好的方法来找到单行注释的结尾?

我到目前为止的正则表达式是:

@"/\\*.*?\\*/"
@"//.*$"

很清楚 dot 是否与行分隔符匹配,然后第二个(单行)永远不会“完成”,但我该如何解决这个问题?我发现一些关于单行的建议更像:

@"(\/\/[^"\n\r]*(?:"[^"\n\r]*"[^"\n\r]*)*[\r\n])"

但这似乎根本不起作用!

在此先感谢您的任何指点。

4

1 回答 1

0

所以事实证明我的例子非常接近它只是由于某种原因我在那里有一些不需要的额外反斜杠,它现在显示为:

@"(//[^\"\n\r]*(?:\"[^\"\n\r]*\"[^\"\n\r]*)*[\r\n])"

(即在 Objective-C 的代码中)。为了澄清我自己的观点,我正在使用 DotMatchesLineSeparator,现在它的工作方式完全符合我的预期。

于 2013-11-10T10:43:29.373 回答