如何修复当字符是新行上的第一个字符时不匹配的正则表达式



>我有一个正则表达式,用于标识与降价格式规则匹配的文本,并用星号括起来。

我确保星号不仅环绕文本,而且星号在文本旁边。 例如,*bold*应该有效,* not bold *不应该,以避免正常的星号陷入格式。

这是我现在的正则表达式: *[^ ][^*]+.[^ ]*

问题是,此文本是正匹配:

*Test
ing*

这不是:

*Test
g*

这两个示例都应与表达式匹配。

我正在使用 regex101.com 进行测试。

有什么想法吗?

提前感谢!

点需要匹配至少一个字符,下一个否定的字符类必须匹配任何字符,但必须匹配空格。因此,点失败,因为在g之前有一个换行符。

*[^* ](?:[^*]*[^ *])?*

*[^*s](?:[^*]*[^s*])?*

这些正则表达式匹配包含至少一个字符的星号之间的字符串。

  • * - 星号
  • [^*s] - 除星号和空格以外的任何一个字符
  • (?:[^*]*[^s*])? - 可选序列
    • [^*]* - 除星号以外的零个或多个字符
    • [^s*] - 除星号和空格以外的任何字符
  • * - 星号。

以下正则表达式匹配您的两个测试用例:

*[^ *]+.*?[^ ]*

除此之外,站点 https://www.freeformatter.com/java-regex-tester.html(我用来检查您的原始正则表达式(也是开发和测试正则表达式匹配器和替换器的好地方。

删除 @wiktor-strbiżew 评论的点确实可以解决问题,但正则表达式可以进一步简化为 *S[^*]+S* .

请注意,这个正则表达式也将匹配整个**Test**字符串,即它匹配双星号。在这种情况下,您没有指定预期行为。

最新更新