2010-11-22 54 views
0

我有一个复杂的正则表达式,我想申请。这是我的模式:如何正确地转义此字符串?

/(?:^|\s|[\.(\+\-\,])(?:\$?)\$((?:[0-9]+(?=[a-z])|(?![0-9\.\:\_\-]))(?:[a-z0-9]|[\_\.\-\:](?![\.\_\.\-\:]))*[a-z0-9]+)/i 

我怎样才能声明这是一个字符串,并确保一切都逃脱?

+1

第一步:通过摆脱不必要的反斜杠和组简化你的模式:`/(?:[|[\s.(+,-])\$?\$((?:[0-9]+ (?= [AZ])|(?![0-9.:_-]))(?:[a-z0-9]|[.:_-](?![.:_-])) * [a-z0-9] +)/我' – Gumbo 2010-11-22 18:06:58

回答

2

在我看来,好像有在正则表达式很多不必要的东西

  1. 喜欢的东西(?:\$?)相同,只是\$?
  2. 没有必要“保护”了“‘‘_’,’,”或‘+’字在方括号组

那么你真正可以拥有的是:

/(?:^|\s|[.(+\-,])\$?\$((?:[0-9]+(?=[a-z])|(?![0-9.:_\-]))(?:[a-z0-9]|[_.\-:](?![._\-:]))*[a-z0-9]+)/i 

至于把它在一个字符串,你真的不必担心这里的反斜杠。那些需要加倍(“\”)。外部的“/”字符将被丢弃,并且尾随的“i”修饰符将被传递到Pattern.compile()方法中。

0

如果你想测试这种模式,我建议你看看使用正则表达式工具,如gskinner。它可以让你放入一个模式,一个字符串,并突出显示匹配。

2

只要有点静态的解决方案就足够了,并且如果您使用Eclipse IDE,则可以选择在从剪贴板粘贴时正确转义字符串。

首选项 - >爪哇 - >编辑 - >键入 - > [X]粘贴时逃生的文字...