Are Java and C# regular expressions compatible?

前端 未结 6 2077
醉酒成梦
醉酒成梦 2020-11-29 21:55

Both languages claim to use Perl style regular expressions. If I have one language test a regular expression for validity, will it work in the other? Where do the regular ex

6条回答
  •  醉话见心
    2020-11-29 22:02

    From my experience:

    Java 7 regular expressions as compared to .NET 2.0 regular expressions:

    • Underscore symbol in group names is not supported

    • Groups with the same name (in the same regular expression) are not supported (although it may be really useful in expressions using "or"!)

    • Groups having captured nothing have value of null and not of an empty string

    • Group with index 0 also contains the whole match (same as in .NET) BUT is not included in groupCount()

    • Group back reference in replace expressions is also denoted with dollar sign (e.g. $1), but if the same expression contains dollar sign as the end-of-line marker - then the back reference dollar should be escaped (\$), otherwise in Java we get the "illegal group reference" error

    • End-of-line symbol ($) behaves greedy. Consider, for example, the following expression (Java-string is given): "bla(bla(?:$|\r\n))+)?$". Here the last line of text will be NOT captured! To capture it, we must substitute "$" with "\z".

    • There is no "Explicit Capture" mode.

    • Empty string doesn't satisfy the ^.{0}$ pattern.

    • Symbol "-" must be escaped when used inside square brackets. That is, pattern "[a-z+-]+" doesn't match string "f+g-h" in Java, but it does in .NET. To match in Java, pattern should look as (Java-string is given): "[a-z+\-]+".

    NOTE: "(Java-string is given)" - just to explain double escapes in the expression.

提交回复
热议问题