我想要一个匹配包含
的字符串的正则表达式 - At least one brace: } or {
and
- At least one digit: \d
and
- At least one instance of either: <p> or </p>
但是以任何顺序,以便匹配所有以下内容:
<p>{123
2}</p>
2<p>}}}
{}{}{}<p></p></p>234234}}}
这些都不匹配:
<p>{ alphabet 123
{2}
{{{}}}
<p>1</p>
这是我到目前为止所提供的内容,它只需要其中任何一个组件:
(<\/p>|<p>|\d|\}|\{)+
我的问题是,我不知道如何更通用,而不必像这样指定顺序:
(<\/p>|<p>)+(\d)+(\}|\{)+
或者愚蠢地列举所有可能的顺序......
我怎么说“以任何顺序至少需要这些组件中的一个?”
感谢。
答案 0 :(得分:5)
如果你的正则表达式支持前瞻,你可以使用正向前瞻:
^(?=.*(\{|\}))(?=.*\d)(?=.*(<p>|<\/p>)).*$
此正则表达式使用正向前瞻来断言该字符串为{
或}
中的至少一个,至少一个数字且至少为<p>
或</p>
之一
如果你想确保字符串只有这些字符串,其他任何东西都不能使用正则表达式:
^(?=.*(\{|\}))(?=.*\d)(?=.*(<p>|<\/p>))(<\/p>|<p>|\d|\}|\{)*$
作为前一个正则表达式,但也确保输入没有其他字符。
正则表达式可以缩短为:
^(?=.*[{}])(?=.*\d)(?=.*<\/?p>)(<\/?p>|[\d}{])*$
利用\{|\}
与[{}]
相同,<p>|<\/p>
与<\/?p>
相同的事实。
答案 1 :(得分:0)
我想你只需检查三个表达式