2

我在 iPhone 上通过 RegKit 使用正则表达式 lib icucore 来替换大字符串中的模式。

我正在寻找的模式看起来像这样

| hello world (P1)|

我将此模式与以下正则表达式匹配

\|((\w*|.| )+)\((\w\d+)\)\|

当找到匹配项时,这会将输入字符串转换为 3 组,其中第 1 组(字符串)和第 3 组(括号中的字符串)是我感兴趣的。

我正在将这些格式化的字符串转换为 html 链接,以便将上面的内容转换为

<a href="P1">Hello world </a>

我的问题是第三组中的尾随空格。当链接突出显示并加下划线时,会导致该行超出打印的字符。

虽然我知道我可以提取所有匹配项并手动处理它们,但使用 icu lib 的搜索和替换功能是一个更清洁的解决方案,因此我宁愿不这样做。

非常感谢一如既往

4

2 回答 2

3

以下内容可以作为备用正则表达式吗?

\|((\w*|.| )+)\s+\((\w\d+)\)\| 插入额外的 \s+ 将空间拉到第一个分组之外。

不过,鉴于您的示例和正则表达式,我不确定您为什么不这样做:

\|(.+)\s+\((\w\d+)\)\|

这将具有相同的效果。但是,您的原始正则表达式和我更简单的正则表达式都会失败,但是:

| hello world (P1)| and on the same line | howdy world (P1)|

它会将其汇总为 1 场比赛。

于 2010-06-29T18:10:54.697 回答
2
\|\s*([\w ,.-]+)\s+\((\w\d+)\)\|

会将尾随空格放在捕获组之外。这当然只有在总是空间的情况下才有效。你能保证吗?

如果没有,请使用

\|\s*([\w ,.-]+(?<!\s))\s*\((\w\d+)\)\|

这使用后向断言来确保捕获组以非空格字符结尾。

于 2010-06-29T18:13:41.153 回答