我有很多包含自定义标签的字符串:
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)。谁可以帮助我?
答案 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是测试你的正则表达式的好地方,你只需要将你想要测试的文本,你的正则表达式放在另一个上,你就可以很容易地看到它正常工作。