允许单引号的现有正则表达式的新规则

时间:2015-06-25 10:22:43

标签: c# regex

我问another question here,但我仍然遇到问题。

我的表达式遵循一些规则:

  • 字符'必须是第一个和最后一个字符
  • ''
  • 中可以有零个或多个空格
  • ''
  • 中可能有零或多%的内容
  • ''内可以有零个或多个单词(字母和数字) 表达:

    (?i)^(?<q>['])[%\p{Zs}\p{L}\p{N}|()]*\k<q>$
    

现在,必须有另一条规则:

  • ''对之间可以有零个或多个单词。

示例:

'content1' this text should pass 'content2'

更新

这里的诀窍是以下内容也应该通过:

' content ' text ' > pass
' ' content ' > pass

它会是什么样子?如果你知道任何关于正则表达式的好书,那对我来说也很有用。

1 个答案:

答案 0 :(得分:1)

您可以使用|运算符将其添加到备用列表中:

^(?<q>')(?:'[^']*'|[%\p{Zs}\p{L}\p{N}|()])*\k<q>$

我删除了[]周围的',并将*量词放在备用列表中。此外,(?i)是多余的,因为正则表达式中没有文字字母。

以下是regex demo

请注意,此'content1' it won't pass 'content2'不会通过,但我猜这是预期的行为。

<强>更新

如果您只想在'之间允许'...',则可以将其添加到字符类中:

^(?<q>')['%\p{Zs}\p{L}\p{N}|()]*\k<q>$

请参阅another demo(在多线模式中添加了\r?用于演示目的)