正则表达式在C#中始终返回false

时间:2019-06-27 10:33:56

标签: c# regex

我有这样的正则表达式:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.ListView?>
<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="list.Controller">
<ListView fx:id="listView"/>
</AnchorPane>

它在http://regexstorm.net中返回true。

但是当我在C#中运行时,它总是返回false。

字符串输入文本:

(?i)^(?!.*\bWITH\b).*\(\s*.*\s*\b(INDEX|FASTFIRSTROW|HOLDLOCK|SERIALIZABLE|REPEATABLEREAD|READCOMMITTED|READUNCOMMITTED|ROWLOCK|PAGLOCK|TABLOCK|TABLOCKX|NOLOCK|UPDLOCK|XLOCK|READPAST)\b\s*.*\s*\)

有人可以解释我为什么吗?

1 个答案:

答案 0 :(得分:4)

为我返回true;可能您没有使用@"...",所以转义符(\b等)并不是您认为的:

Console.WriteLine(Regex.IsMatch(
    @"INNER JOIN t_hat_meisaimidasi AS MM (READCOMMITTED, NOLOCK) WHERE ( AND hat_kanri_no = ?",
    @"(?i)^(?!.*\bWITH\b).*\(\s*.*\s*\b(INDEX|FASTFIRSTROW|HOLDLOCK|SERIALIZABLE|REPEATABLEREAD|READCOMMITTED|READUNCOMMITTED|ROWLOCK|PAGLOCK|TABLOCK|TABLOCKX|NOLOCK|UPDLOCK|XLOCK|READPAST)\b\s*.*\s*\)"));

注意:"\b"是长度为1的字符串,其中包含一个退格字符; @"\b"是长度为2的字符串,其中包含斜杠和b。处理正则表达式时,几乎总是要使用逐字字符串文字(@"...")。

要使其变得更好:Visual Studio将使用着色来告诉您何时正确:

enter image description here