我有一个正则表达式(.Net - System.Text.RegularExpressions),用于匹配“()”中的任何内容,并且它必须包含至少一个数字,一个字母和一个正斜杠“/”。这是我到目前为止所提出的:
(((?=[^\s]*[0-9])(?=[^\s]*[a-zA-Z])(?=[^\s]*[/])))\([0-9a-zA-Z"£$%^&*([\]_+=\-–`{}:@~#';<>?/.,|\\]+\)
在测试中(在Outlook 2010 addin,.Net 4.0中使用),这似乎工作正常,并且会正确匹配/不匹配以下内容:
应匹配: - (TYR / 12/2),(KEN1 / 1),(KJC / 8430-3&amp; 4 / Greenfield),
不应该匹配: - (2 pm-5pm),(HempsonsLive.18295415.v0.1),(HOW121.3)
但是,在生产环境(也是Outlook 2010)中进行测试时,根据以下内容错误地匹配字符串:
(@name="beausdfdmp_prod")
(@name="plosdfgms04")
(@name="boonapbfms03")
(@name="plonapbfms01")
(@name="bfff_pl_server5")
我还不能在开发中重现这些匹配,所以不知道为什么在生产中它匹配它们。如果客户端生产环境运行.Net 3.5或更低版本,这会对正则表达式产生影响吗?
关于可能导致此问题的任何其他想法?
答案 0 :(得分:2)
在前瞻中,我宁愿exclude关闭 div {
min-height:300px;
border-left: 1px solid black;
}
而不是使用)
。
[^\s]*
开幕后\((?=[^)\d]*\d)(?=[^)\/]*\/)[^)]*?[a-zA-Z][^)]*\)
\(
look ahead一位数(?=[^)\d]*\d)
展望一个正斜杠(?=[^)\/]*\/)
非[^)]*?[a-zA-Z][^)]*
包含至少一个字母,直到文字结束)
\)
答案 1 :(得分:0)
尝试使模式不那么模糊和冗长。
如果您打算匹配至少应包含数字,字母和正斜杠的括号字符串,您可以使用
\((?=[^()\p{L}]*\p{L})(?=[^()\d]*\d)(?=[^()/]*/)[^()]*\)
请参阅regex demo
正则表达式匹配:
\(
- 打开圆括号(?=[^()\p{L}]*\p{L})
- 括号内必须有一个字母(?=[^()\d]*\d)
- ()
(?=[^()/]*/)
- ()
[^()]*
- 除(
和)
以外的零个或多个符号\)
- 关闭)
。如果使用非.NET正则表达式引擎处理正则表达式,您可能希望将其更改为:
[(](?=[^()A-Za-z]*[A-Za-z])(?=[^()0-9]*[0-9])(?=[^()/]*/)[^()]*[)]
见another demo。此正则表达式没有转义,在您的情况下可能也是一个问题,\p{L}
将替换为ASCII字母[a-zA-Z]
。