拆分逗号分隔的正则表达式输入字符串

时间:2018-03-19 13:50:59

标签: c# .net regex

给出逗号分隔的正则表达式字符串,例如:

^test\d+.txt$, ^[-,0-9]+$ // provided by user

我想用逗号分隔它并获取

  • ^测试\ d + .TXT $
  • ^ [ - ,0-9] + $

而不是

  • ^测试\ d + .TXT $
  • ^ [ -
  • 0-9] + $

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

从评论中可以看出,是正则表达式中的有效符号,并且取决于有利于其中的有效分隔符(例如在限定符中)。因此,不可能将正则表达式分隔为','。我怀疑你使用的字符在选择作为分隔符的符号和包含该字符的表达式之间仍然存在歧义并不重要。在您的示例中,您评论输入为provided by user。如果您可以控制此输入过程,则可以将分隔符更改为不同的分隔符,例如,如果您知道只有一种语言在运行,则可以使用来自不同语言的唯一字符(假设代码正在插入字符而不是直接用户)。当然,最好的解决方案是将这些信息传递给一个数组(每个元素一个正则表达式)。

最终它取决于很多事情。正则表达式易受无限回溯等问题的攻击,当你允许任意正则表达式处理时,这可能是一个问题。再次,如果您可以控制输入过程,您可以考虑为用户提供一个更简单的模板,如语言,所以输入像#A; AAAAA 99" (按用户)可以转换为" [\ w] {5} [\ d] {2}"按代码。这对用户来说更简单,并且允许您更好地控制用户输入可以创建的混乱程度。

如果您无法修改/控制输入过程,那么您应该教您的用户编写正则表达式代码,方法是将它们指向quick reference。因此,他们可以创建一个单独的表达式来完成他们想要的一切。

无论何时运行未知的正则表达式,您都应该使用允许您提供超时的方法来防止正则表达式超过您想要等待的时间。

概要。没有好的答案。您选择作为分隔符的内容与有效正则表达式可以包含的内容之间存在歧义。您最好的选择是更改输入的形式或用户的行为。