2013-01-10 61 views
-3
拆分數據

我試圖做到這一點:有2條或3個規則與PHP

我有一個這樣的鳴叫:

#iamatweet我們準備做一個紙29x12尺寸

我可以拆分這個字符串,但是我怎樣才能從這個字符串得到29x12 ...它來作爲$mytweet ...我怎麼能做到這一點?

+0

29x12究竟是什麼? –

+1

向我們解釋你想要做的事情。拆分字符串的規則是什麼?你試過什麼了? –

回答

5

在你的情況,這是很容易的,你可以把尺寸(45)的偏移量和它的長度(5),像這樣:

$dimension = substr($mytweet, 45, 5); 

它變得更加複雜,如果子串的位置29x12左右移動,那麼你需要先搜索它。但是,這會帶來下一個問題,應該搜索哪些內容?如果你知道它的字符串29x12不已,你就不需要將其解壓:

$dimension = '29x12'; 

所以,你應該分享你正在試圖解決該問題正是

+0

不錯,我笑了:) – glomad

+0

不喜歡。因爲每一個微博談到不同 一個來了:#imatweet唧唧歪歪56x17唧唧歪歪 其他:#imatweet 67x27唧唧歪歪喇嘛 其他:#imatweet唧唧歪歪唧唧歪歪喇嘛88x22 –

+2

是的,每個鳴叫來不同,但每一條推文都有類似的地方。你有一個模式,描述該模式是開發代碼的第一步。分享你對這種模式的看法。 – hakre

1

您可以使用此代碼解析尺寸:

if (preg_match("/(^|\s)\d+x\d+(\s|$)/", "#iamatweet we are going to make a paper with 29x12 dimensions", $m)) { 
    echo $m[0]; 
} 

要澄清一下這個正則表達式執行以下部分表示:

(^|\s) - Beginning of line or a space 
\d+ - First number, minimum one digit 
x  - Сharacter that you use as delimiter in dimension 
\d+ - Second number, minimum one digit 
(\s|$) - End of line or a space 
+0

你們請澄清一下代碼嗎?我的意思是,我知道它做了什麼,但穆斯塔法Hepekiz不 –

+0

謝謝沃爾科夫我會嘗試 –

1

由於hakre說,你要解釋清楚你的要求。在這種情況下,您需要明確定義您要在字符串內搜索的內容

根據您的意見和例子,看來你正在尋找一個下列定義相匹配的字符串:

  1. 的連續數字
  2. 隨後立即x字符(不帶空格的變化量)
  3. 的連續數字

在這種情況下的另一種變化的量,正則表達式是適當的查找和分機收聽你正在尋找的字符串。但是我們仍然缺少一個重要的信息:可以接受多少位數字?

如果這個問題的答案是未知的或無限的,那麼這個正則表達式將工作:

\d+x\d+ 

如果是有極限的,那麼你就需要施加這些限制在正則表達式。例如,如果你只能有數字2到4(無多,不會少),這個正則表達式將如下所示:

\d{2,4}x\d{2,4} 

請注意,我們也不得不做出上述假設的:(不帶空格)。空間是否允許?如果是這樣,那是另一種變化,它看起來像:

\d{2,4} x \d{2,4} 

爲了解釋這個好一點:

\d{2,4} - Matches between 2 and 4 digits 
     - Matches a single space character 
x  - Matches a single 'x' character 
     - Matches a single space character 
\d{2,4} - Matches between 2 and 4 digits 

你會使用這些正則表達式中的PCRE functions之一,例如,preg_match()

$regex = '\d{2,4}x\d{2,4}'; 
$tweet = '#iamatweet we are going to make a paper with 29x12 dimensions'; 
preg_match('#(' . $regex . ')#', $tweet, $matches); 
echo "The dimensions are " . $matches[1]; 

在這個例子中,preg_match()匹配正則表達式對你的輸入字符串,和捕獲的匹配(在正則表達式中捕獲的文本跨度)在$matches變量中。由於正則表達式有一個捕獲組,因此正則表達式捕獲的文本在$matches[1]中可用,我在echo語句中打印出該文本。

希望這個答案對於你如何闡明你的問題和要求有一定的瞭解,以便讀者能夠理解你在找什麼。密切關注被問到的細節,因爲它們對於回答你的問題至關重要。否則,沒有足夠的信息供任何人提供幫助。