如何过滤指定标签格式的数字?

时间:2012-04-06 14:17:08

标签: regex

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

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} -tags,但我需要保存的$ match是一个araay(12,456,13243,13)。谁可以帮助我?

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

您想要的值将在$matches[1]

答案 1 :(得分:2)

@Qtax我无法评论你的答案,因为我没有足够的代表,但我会说他应该看管道,所以正则表达式完全符合他想要的那段文字

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

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

随着我发布的更改,您将匹配整个文字,因此您只能获得一次,并且会获得您需要的数字。

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

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