2015-08-15 48 views
0

我遇到了一个正则表达式问题,这个正则表达式似乎无法按我想要的方式工作。PHP正则表达式:在下划线之间获取数字

这里有(不同的)输入的字符串的两个例子:

  • 1111_market1233_ 700x100 _BLU
  • 1111_market232_ 8000x000 _AES
  • 1111_market11_ 689x41777 _CER

当然,没有b我对正则表达式有了一定的了解,但是由于不同的原因,我没有得到文本中的大胆部分。下面是我做的例子:

preg_match("/_([^0-9])x([^0-9])_/", $input_line, $output_array); 

当然,这是行不通的。预期的输出我想要的是:

  • 700x100
  • 8000x000
  • 689x41777

回答

1

你几乎得到了它。只需添加重复和删除^

/_([0-9]+)x([0-9]+)_/ 

^字符集内,使集匹配任何里面是什么。又名[^0-9]将匹配任何不是数字的东西。

另外字符集自己只匹配一个字符。又名[0-9]只匹配一个数字。 +表示匹配1次或多次


如果你想从匹配中删除下划线,你可以使用 positive lookahead and lookbehind。这将使正则表达式只需验证它们的存在,而不是包括他们在比赛中:

/(?<=_)([0-9]+)x([0-9]+)(?=_)/ 

See it in action

+0

快速!谢谢。你可以尝试删除下划线吗? http://www.phpliveregex.com/p/chF – Robin

+0

@Robin,更新了我的答案。 – ndn

+1

你摇滚。我会在5分钟内接受这个答案,不能这样做......非常感谢你的朋友。非常感谢!!! – Robin

相关问题