正则表达式特殊字符'{'在JS中匹配但在Java中不匹配

时间:2017-02-22 07:16:18

标签: javascript java regex

测试字符串: abc{123

正则表达式: \w+{\d+

这在JS中匹配,但是当我尝试在Java中匹配它时,它给了我这个错误:

索引2附近非法重复 \w+{\d+

只有当我逃避 {这样的字符时才能使用Java: \w+\{\d+

我试过这两个链接:

期望的结果:如果它在JS中匹配,它也应该在Java中匹配。

Java和JS中的正则表达式实现有什么区别?如何使它在Java和JS中以相同的方式运行?

3 个答案:

答案 0 :(得分:1)

  

如何使它在Java和JS中以相同的方式运行?

你已经知道了答案:

  

只有当我逃脱{字符:\w+\{\d+“。

时才能使用Java

为什么呢?因为这里的JavaScript有点宽容。请注意,在JavaScript中\w{3将匹配"f{3",但不匹配"f77"; \w{3}将与"f77"匹配,但不会与"f{3}"匹配。也就是说,相同的字符{会根据字符串后面某处出现}来改变含义。因此,这种行为因其宽容性而变得更加难以预测,Java只是不允许你如此粗俗地编写正则表达式。

答案 1 :(得分:0)

你只需要逃避{。所以正则表达式应该是这样的:

\w+\{\d+

你的初始正则表达不是有效的..在这种情况下,Javascript只是更宽容..但是{是你想要在正则表达式中转义的字符之一,因为它意味着多少次重复这样的特定字符:[a-z]{22}将匹配来自az的22个连续字符。

答案 2 :(得分:0)

你必须转义特殊字符,因为反斜杠也是一个特殊字符,你也必须转义它。正则表达式在java中是这样的:\\w+\\{\\d+。如果您有问题,请随时提出。您可以在此处生成多种编程语言的代码:https://regex101.com/r/D4yz40/1此示例与您的字符串匹配。然后,您可以生成java和js的代码