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

时间:2018-05-17 11:38:31

标签: dart

你如何逃避达特的星号?

我在regex101测试器上测试了以下正则表达式

\*\*(.*?)\*\*

针对以下字符串

find me **this** and **my other string** please

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

在dart中,我在vscode'使用有效的正则表达式语法'中收到警告,但它失败并出现以下错误:

FormatException: Nothing to repeat**(.*?)**

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

https://dartpad.dartlang.org/dbb38b6c97bbc16d994e71e27e9cda30

2 个答案:

答案 0 :(得分:3)

您可以使用原始字符串(在字符串文字前加r

)来解决此问题
new RegExp(r"\*\*(.*?)\*\*");

或通过转义特殊字符

new RegExp("\\*\\*(.*?)\\*\\*");

原始字符串不能与'my string $someVar foo'之类的字符串插值一起使用,因为raw意味着字面上需要所有字符。

答案 1 :(得分:0)

如果文本来自 TextField,请使用:

RegExp.escape();

示例:

RegExp rex = RegExp('${RegExp.escape(searchText)}', caseSensitive: false, unicode: true);