regex XML正则表达式不允许与号

mccptt67  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(104)

我们有以下正则表达式

(^\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.) /? +
fkvaft9z

fkvaft9z1#

这个正则表达式怎么样
在自由间距模式(https://regex101.com/r/uXyPly/1)下:

(?x)                     # turns on free spacing mode
^                        # start of line
(?!\/|\h)                # disable / and space at start of line
(?!.*\h\h|.*\/\/)        # disable double space or /
[a-zA-Z\/\-?:()\.,'+\h]+ # allows specified character set
[a-zA-Z\-?:()\.,'+]      # space and / not allowed at end
$                        # end of line

正常模式(https://regex101.com/r/Z4K9zm/1):

^(?!\/|\h)(?!.*\h\h|.*\/\/)[a-zA-Z\/\-?:()\.,'+\h]+[a-zA-Z\-?:()\.,'+]$

注意事项:
1.正如你在评论中所建议的,我排除了负面的观点。
1.我使用\h而不是\s来确保水平空白(\s也可以捕获换行符)

jpfvwuh4

jpfvwuh42#

在.NET中,你可以匹配一个或多个空格或正斜杠,但不能使用捕获组和反向引用来匹配双出现。
外部重复组可以是atomic group(?>,以防止在没有匹配的情况下出现一些回溯。
如果您想匹配空白字符(包括换行符),可以将``替换为\s

^[a-zA-Z?:().,'+-]+(?>(?:([ /])(?!\1))+[a-zA-Z?:().,'+-]+)*$

模式匹配:

  • ^字符串开头
  • [a-zA-Z?:().,'+-]+匹配1个或多个允许的字符
  • (?>原子群
  • (?:非捕获组作为整体部分重复
  • ([ /])(?!\1)捕获组1中的空格或/,并使用负向前查找(?!Assert下一个字符与使用反向引用\1捕获的字符不同
  • )+关闭非捕获组并重复1次或多次
  • [a-zA-Z?:().,'+-]+匹配1个或多个允许的字符
  • )*关闭组并选择重复
  • $字符串结尾

参见.NET regex demo

相关问题