用于php的正则表达式包含但不包含字母

时间:2015-07-31 12:48:23

标签: php regex

我有一个如下所示的数组:

[cspacer231]
[*spacer231]
[*spacer10]-
[*spacer2]
[*spacer3210]-
[cspacer2221]

现在,我想在最后没有 - 所有[*spacerNUMBER]。 我的尝试是"/\[\*spacer(.*?)](?!-)/",但它只需要第一个孩子。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

尝试以下方法:

"/\[\*spacer(.*?)\]$/"

$符号要求]之后没有任何内容。

如果您想在spacer之后限制数字:

"/\[\*spacer([0-9]*?)\]$/"

答案 1 :(得分:0)

尝试:

/\[.*spacer(.*?)](?!-)/g

答案 2 :(得分:0)

你的正则表达式应该是

\[\*spacer(\d+)\](?!-)

演示:https://regex101.com/r/wD5fM9/1

在PHP中使用:

$array = array('[cspacer231]',
'[*spacer231]',
'[*spacer10]-',
'[*spacer2]',
'[*spacer3210]-',
'[cspacer2221]');
foreach($array as $thing) {
     if(preg_match('~\[\*spacer(\d+)\](?!-)~', $thing, $match)) {
          echo $match[1] . "\n";
     }
}

输出:

231
2

您应该使用\d+,因此您确定它是一个数字,而不仅仅是任何内容。