我有这样的正则表达式:
<?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*\)
有人可以解释我为什么吗?
答案 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将使用着色来告诉您何时正确: