测试字符串: abc{123
正则表达式: \w+{\d+
这在JS中匹配,但是当我尝试在Java中匹配它时,它给了我这个错误:
索引2附近非法重复
\w+{\d+
只有当我逃避 {这样的字符时才能使用Java: \w+\{\d+
我试过这两个链接:
期望的结果:如果它在JS中匹配,它也应该在Java中匹配。
Java和JS中的正则表达式实现有什么区别?如何使它在Java和JS中以相同的方式运行?
答案 0 :(得分:1)
如何使它在Java和JS中以相同的方式运行?
你已经知道了答案:
只有当我逃脱{字符:
时才能使用Java\w+\{\d+
“。
为什么呢?因为这里的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的代码