我们有以下正则表达式
(^\S+([0-9a-zA-Z\-\?:\(\)\.,'\+\s].\S+)*$)
这个正则表达式的XML模式解释不允许在文本中的任何地方使用&符号(&
),但在.NET解释中是允许的。
请帮助重写它,以便它在XML模式验证和.NET验证中的行为相同。
我们尝试过集成类似^[^&]*$
的东西,但没有成功。
正则表达式应该禁止使用非a-z A-Z / -的字符吗?:().,' +并禁止在行的开头和结尾使用斜杠“/”,在行内使用双斜杠“//”。它不应该在文本中包含重复的空格以及前导或尾随空格。
以下文本在XML模式验证和.NET正则表达式验证中都不应该有效:
Dlhy & testovaci nazov
Dlhy&Testovaci nazov
Dlhy &Testovaci nazov
Dlhy& Testovaci nazov
Dlhy Testovaci nazov
这是有效的
Dlhy a: 'Testovaci, (nazov.) /? +
2条答案
按热度按时间fkvaft9z1#
这个正则表达式怎么样
在自由间距模式(https://regex101.com/r/uXyPly/1)下:
正常模式(https://regex101.com/r/Z4K9zm/1):
注意事项:
1.正如你在评论中所建议的,我排除了负面的观点。
1.我使用
\h
而不是\s
来确保水平空白(\s
也可以捕获换行符)jpfvwuh42#
在.NET中,你可以匹配一个或多个空格或正斜杠,但不能使用捕获组和反向引用来匹配双出现。
外部重复组可以是atomic group
(?>
,以防止在没有匹配的情况下出现一些回溯。如果您想匹配空白字符(包括换行符),可以将``替换为
\s
模式匹配:
^
字符串开头[a-zA-Z?:().,'+-]+
匹配1个或多个允许的字符(?>
原子群(?:
非捕获组作为整体部分重复([ /])(?!\1)
捕获组1中的空格或/
,并使用负向前查找(?!
Assert下一个字符与使用反向引用\1
捕获的字符不同)+
关闭非捕获组并重复1次或多次[a-zA-Z?:().,'+-]+
匹配1个或多个允许的字符)*
关闭组并选择重复$
字符串结尾参见.NET regex demo。