Java Regex在声明

时间:2015-08-24 14:59:25

标签: java regex

我在Java中编写语法高亮显示器。我使用关键字var:

在我的自酿语言中声明变量
  

var alpha

变量名仅由字母构成。声明始终出现在函数的顶部。我希望在声明后匹配所有出现的单词。我已经达到了:

\\bvar\\s+([a-zA-Z]+)\\b(?:.*?(\\1)\\b)*

(反斜杠都在Java代码中转义)

但是,这仅匹配变量的第一次和最后一次出现。我试图改变' *'贪婪/非贪婪/占有欲但它似乎没有帮助。

示例:

  

alpha var alpha alpha alpha

除了匹配的第一个

之外的所有alpha
  

var alpha beta alpha

所有alpha匹配的beta不匹配

1 个答案:

答案 0 :(得分:0)

如果您逐个匹配第一个var名称,则可以执行此操作。要确保var名称前面带有关键字$("#sync1 .item").on("click", function() { var index = $(this).attr("data-slick-index"); $(".overlay-carousel-container").css("display", "block"); $("body").css("overflow", "hidden"); $("#overlayCarousel").slick({ slidesToShow: 1, slidesToScroll: 1, fade: true, initialSlide: index, focusOnSelect: true }); }) $(".close").on("click", function() { $(".overlay-carousel-container").css("display","none"); $("body").css("overflow", "inherit"); $("#overlayCarousel").slick("unslick"); $("#executiveOverlay").slick("unslick"); }); ,您需要使用var功能,该功能是最后一次匹配后位置的锚点(这可确保匹配是连续的)。

\G

(?m)(\\G(?!\\A)|\\W*(?>\\w+\\W+)*?\\bvar[^\\S\\n]+)(\\w++)([^\\S\\n]*(?>\\w+[^\\S\\n]+)*?)(?=\\2|$) 作为替代。

demo(点击绿色Java按钮)

模式细节:

$1*$2*$3

(*)默认情况下,第一个结果(?m) # switch on the multiline mode ( # capture group 1 \\G(?!\\A) # contiguous to the previous match (*) | \\W*(?>\\w+\\W+)*? # to reach quickly the "var" keyword \\bvar [^\\S\\n]+ # whitespaces except newlines ) (\\w++) # capture group 2: first var name ([^\\S\\n]*(?>\\w+[^\\S\\n]+)*?) # capture group 3: # reach the next occurence of the var name # or the end of the line (?=\\2|$) 匹配字符串的开头。 \G仅用于防止此情况发生。