1

我有很多包含自定义标签的字符串:

hello {RT|12} world {RT|465} this is {RT|13243}a string with{RT|13}examples

我需要一个正则表达式来过滤掉 {RT|xx} 形式的所有标签数量,其中 xx 是任何可能长度的数字。由于我对正则表达式不太擅长,因此我一直在尝试以下方法:

preg_match("/{RT|.*}/", $string, $matches)

这现在过滤掉了 {RT|xx} 标记,但我需要 $matches 保存的是 araay(12, 456, 13243, 13)。谁能帮帮我?

4

2 回答 2

2

您可以使用:

preg_match_all('/{RT\|(\d+)}/', $string, $matches)

你想要的值将在$matches[1].

于 2012-04-06T14:19:49.577 回答
2

@Qtax我无法在您的回答中发表评论,因为我没有足够的代表,但我会说他应该避开管道,因此正则表达式与他想要的文本完全匹配

preg_match_all('/{RT\|(\d+)}/', $string, $matches, PREG_PATTERN_ORDER)

在@Qtax回答的海报评论后编辑: @reveller在我发布时更改您的正则表达式,您有一个空字符串,因为您在 | 之前匹配 '{RT' 和管道后面的 '(\d+)}' ,并且由于第一个匹配项没有一个组来赶上该值,因此它返回一个空字符串。

在我发布时进行更改,您将匹配整个文本,因此您只会获得一次并获得您需要的数字。

它的发生导致管道'|' 正则表达式上的意思是 OR,所以你匹配的是 '{RT' OR '(\d+)}'。要不匹配两次,您需要转义管道,以便正则表达式将其作为文本匹配。

这个站点是测试你的正则表达式的好地方,你只需把你想要测试的文本,你的正则表达式放在另一个上,你就可以很容易地看到它的工作。

于 2012-04-06T14:30:50.650 回答