正则表达式:如何生成条件正则表达式
本文关键字:正则表达式 条件 何生成 | 更新日期: 2023-09-27 18:06:01
我的正则表达式有以下条件:当字符串不为空时,它应该包含单词"内部">
换句话说:
"<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'".*$)
--托马斯
"<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|)'.*$
也许我应该添加自己的答案。到目前为止,答案都是使用成本略高的捕获组。对非捕获组使用"或"条件:
(?:^$)|(?:linktype=[''"]internal[''"])
第二部分上不需要锚,因为根据定义,RE将在没有锚的情况下匹配字符串中的任何位置。
此外,要在RE中使用"and"条件,只需将规则连接在一起即可。这就是上述RE的实际形成方式。它是(anchor start AND anchor end(OR(一个l
AND i
AND n
…AND字符集['"]AND i
AND……(
string regex = "^(?:''n|.*linktype=(['''"])internal''1.*''n)";
var options = RegexOptions.Multiline);
var reg = new Regex(regex, options);