2015-08-15 136 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