正则表达式,如何转义字符,特别是星号

atr*_*eon 4 dart

你如何在 Dart 中避开星号?

我已经在 regex101 测试仪上测试了以下正则表达式

\*\*(.*?)\*\*
Run Code Online (Sandbox Code Playgroud)

针对以下字符串

find me **this** and **my other string** please
Run Code Online (Sandbox Code Playgroud)

它按预期找到两个结果(“this”和“my other string”)。

在 dart 中,我在 vscode 中收到警告“使用有效的正则表达式语法”,但失败并显示以下错误:

FormatException: Nothing to repeat**(.*?)**
Run Code Online (Sandbox Code Playgroud)

我认为我的星号没有被正确转义。有没有一种特殊的方法来逃避飞镖中的星号?这是一个飞镖

https://dartpad.dartlang.org/dbb38b6c97bbc16d994e71e27e9cda30

Gün*_*uer 6

您可以通过使用原始字符串来解决这个问题(在字符串文字前加上 r

new RegExp(r"\*\*(.*?)\*\*");
Run Code Online (Sandbox Code Playgroud)

或通过转义特殊字符

new RegExp("\\*\\*(.*?)\\*\\*");
Run Code Online (Sandbox Code Playgroud)

原始字符串不能与像 那样的字符串插值一起使用'my string $someVar foo',因为原始意味着它按字面意思接受所有字符。

  • 我发布后一秒钟就解决了!非常感谢 Gunter 和您的所有其他帖子:-) (2认同)

Ali*_*eri 6

如果文本来自 TextField 使用以下命令:

RegExp.escape();
Run Code Online (Sandbox Code Playgroud)

样本:

RegExp rex = RegExp('${RegExp.escape(searchText)}', caseSensitive: false, unicode: true);
Run Code Online (Sandbox Code Playgroud)