gpt4 book ai didi

java - 正则表达式匹配简单的 Markdown

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:38 25 4
gpt4 key购买 nike

我试图找出正则表达式来匹配 *this kind of strings* 的所有出现。不幸的是,另外两条规则使这件事比我想象的要复杂:

  1. 标记的字符串应该以 * 开头,后跟非空白字符(所以 * this one* 不应该被匹配
  2. 标记的字符串应以非空格结尾,后跟 * 后跟空格(所以 *this one **this o*ne不应该匹配

我从最简单的正则表达式 \*\S([^\*]+)?\* 开始,用于我的测试字符串:

*foo 1 * 2 bar* foo *b* azz *qu **ux*

匹配方括号中的位置:

[*foo 1 *] 2 bar* foo [*b*] azz [*qu *][*ux*]

这就是我想要实现的目标:

[*foo 1 * 2 bar*] foo [*b*] azz [*qu **ux*]

所以出现了2个问题:

  • 如何在正则表达式中表达来自 2 的规则。“搜索直到出现第一个非空格后跟 * 后跟空格”?积极前瞻?
  • 如何匹配规则 2 中的空格,但不将其包含在结果中,\*\S([^\*]+)?\*\s 会这样做吗?

最佳答案

如果你想从最右边开始匹配* , 你可以使用

\*(?=[^\s*]).*?(?<=[^\s*])\*(?!\S)

从最左边的 * 开始匹配(如``),删除*从第一次环视(或用 \S 替换其模式):

\*(?=\S).*?(?<=[^\s*])\*(?!\S)

参见 regex demo #1regex demo #2 .添加(?s)在开始或用 Pattern.DOTALL 编译跨行匹配文本。

详情

  • \* - 一个 *字符
  • (?=[^\s*]) - 下一个字符必须是非空白而不是 *
  • .*? - 尽可能少的任何 0+ 个字符
  • (?<=[^\s*]) - 前面的字符应该是非空白而不是 *
  • \* - 一个 *字符
  • (?!\S) - 空白边界模式,下一个字符可以是空白,或者字符串结尾可以在字符串中的这个位置。

在 Java 中:

String regex = "\\*(?=[^\\s*]).*?(?<=[^\\s*])\\*(?!\\S)";

关于java - 正则表达式匹配简单的 Markdown ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56343924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com