正则表达式匹配Java

时间:2016-03-10 15:30:47

标签: java regex

我有一个问题正则表达式匹配一个大写字母,后面跟一个小写字母。我希望在任何这样的比赛之后打破,但我似乎无法让它发挥作用。

为了使它更通用 - 我想在正则表达式中的任何匹配之前和之后进行拆分。

示例string "TeSTString"

通缉结果 - > [Te, S, T, St, ring]

我已经尝试过任何我能想到的东西,但是我被前瞻或后悔所欺骗。

首先我尝试了[A-Z][a-z]?,这匹配完美,但将其删除......

结果 - > [ring]

在此之后我做了积极的预测(?=([A-Z][a-z]?))给了我一些接近......

结果 - > [Te, S, T, String]

并且后视(<=?([A-Z][a-z]?))完全没有任何内容......

结果 - &gt; [TeSTString]

甚至试图在绝望的尝试中扭转后视(<=?([a-z]?[A-Z])),但这是相当不成功的。

在我失去理智之前,任何人都可以在正确的方向上给出一个好的指针吗?

2 个答案:

答案 0 :(得分:1)

这是一个与预期结果相符的复杂模式。

String test = "TeSTStringOne";
System.out.println(
    Arrays.toString(
        //          | preceded by lowercase
        //          |        | followed by uppercase
        //          |        |       | or
        //          |        |       || preceded and followed by uppercase
        //          |        |       ||                  | or
        //          |        |       ||                  || preceded by uc
        //          |        |       ||                  || AND lowercase
        test.split("(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z])|(?<=[A-Z][a-z])")
    )
);

<强>输出

[Te, S, T, St, ring, On, e]

注意

[a-z]替换为\\p{Ll},将[A-Z]替换为\\p{Lu}以使用重音字母。

答案 1 :(得分:0)

尝试:

(?<=[A-Z][a-z])

DEMO

  • (?=(?<!^)[A-Z]) =对于大写的正面观察,然后是 小写,
  • this.updateCategory = function(_data){ $http.put("/domain/api/categories/"+_data.category_id, _data).success(function(res){ console.log("Got put method " + res);] }) } - 对于大写的正向前瞻,如果没有前面的行的开头,