繁体   English   中英

正则表达式:如何制作条件正则表达式

[英]Regular expressions : How to make a conditional regex

我的正则表达式有以下条件:当字符串不为空时,它应包含单词“internal”

换句话说:

"<link linktype='internal' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> OK
"<link linktype='external' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> NOK
"test" --> NOK
"" --> OK

我知道可以使用以下命令检查空字符串: ^$
或者是非空字符串,其中包含: ^\\s*\\S
我的内部检查只是: linktype=\\'internal\\' (例如)

将它们结合在一起是困难的部分。 我一直坚持这个,但它没有按预期做到:

(?(?=^\s*\S)linktype=\"internal\"|^$)

有人可以帮忙吗?

既然你提到了C#,你不妨试试这个:

if(str.Length == 0 || str.Contains("internal"))

它有效,而且很简单。

你可以尝试(^$)|(^.*linktype=\\"internal\\".*$)

空字符串或文本linktype="internal"的字符串。

在这种特殊情况下,您可以使用:

^(.*linktype=['"]internal['"].*)?$

否则,分别为每个案例编写一个正则表达式然后将它们括在括号中并使用'或'将它们包含在单个表达式中更容易:

(^$)|(^.*linktype=['"]internal['"].*$)

这将匹配^$^.*linktype=['"]internal['"].*$

怎么样的

(^$)|(^.*linktype=\"internal\".*$)

--Tomas

这样的事情应该这样做:

^.*linktype='(internal|)'.*$
"<link linktype='internal' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> OK
"<link linktype='external' id='{F88AE8AE-69C4-4E31-95BF-73B110FEE63A}' />" --> NOK
"test" --> NOK
"" -->

如果linktype ='internal'匹配你并不关心linktype ='internal'之前和之后的内容,那么无论如何你都会得到一个匹配:

(^$)|(linktype='internal')

也许我应该添加自己的答案。 到目前为止,答案使用的捕获组略高一些。 要对非捕获组使用“或”条件:

(?:^$)|(?:linktype=['\"]internal['\"])

在第二部分上不需要锚点,因为根据定义,RE将匹配字符串中的任何地方而没有锚点。

此外,要在RE中使用“和”条件,您只需将规则连接在一起即可。 这就是上面的RE实际形成的方式。 它是(锚开始和结束锚)OR(一li AND n ... AND字符集['“] AND i AND ...等...)

string regex = "^(?:\\n|.*linktype=([\'\"])internal\\1.*\\n)";
var options = RegexOptions.Multiline);
var reg = new Regex(regex, options);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM