2017-09-29 12 views
0

preg_matchまたはpreg_splitを使用して、以下の配列の3つの出力を出力する必要があります。どのようにすればいいですか?preg_match 1桁の数字と両側に空白がある場合

<?php 

$matched = preg_match('/([0-9])/', $string, $matches); 
if($matched){ 
    print_r($matches); 
} 

希望これを試してみてくださいするpreg_match以下を与える

('\\s+\\d\\s+', $output) 
('\\s+[\\d]\\s+', $output) 
("^[\s0-9\s]+$", $output) 
("/(.*), (.*)/", $output) 
+2

ここでのルールは正確には何ですか?スペースの直前に1桁の数字が1つだけ出現していますか?いつも同じ場所にいるのですか、それともどこにでもいられますか?あなたは "下の配列"と言っていますが、あなたが提供したものは配列ではなく文字列です。どちらですか? –

+0

'/(\ d {1})/'を試しましたか? –

+1

実際のコードを投稿する必要があります。そしてその見た目で、区切り文字が欠落しています。二重バックスラッシュは何ですか? – jeroen

答えて

1

:するpreg_matchとpreg_splitの両方を使用していない成功を収めて、次のこの可能性は8

VMName Count CompatibilityForMigrationEnabled CompatibilityForOlderOperatingSystemsEnabled ------ ----- -------------------------------- -------------------------------------------- ap-1-38 3 False False 
私が試してみました

を通じて1です助けて!

0

空白の間にある18の数と一致するように、あなたは

preg_match('~(?<!\S)[1-8](?!\S)~', $s, $match) 

を使用することがregex demoを参照してください。

詳細

  • (?<!\S) - 空白またはエンド - 8
  • (?!\S)1から桁 - 現在位置
  • [1-8]のすぐ左に必要な空白文字または文字列の開始現在の場所のすぐ右に必要なストリングの数

PHP demoを参照してください:あなたはまた、撮影のアプローチを使用することができ

$str = 'VMName Count CompatibilityForMigrationEnabled CompatibilityForOlderOperatingSystemsEnabled ------ ----- -------------------------------- -------------------------------------------- ap-1-38 3 False False'; 
if (preg_match('/(?<!\S)[1-8](?!\S)/', $str, $match)) { 
    echo $match[0]; 
} 
// => 3 

注:

if (preg_match('/(?:^|\s)([1-8])(?:$|\s)/', $str, $match)) { 
    echo $match[1]; 
} 

regex demoPHP demoを参照してください。ここ

(?:^|\s)は(([1-8])で)、次いで1から8に数字が捕捉され、文字列の非捕捉交替グループマッチング開始*(^)または(|)空白(\s)であり、次いで(?:$|\s)マッチ文字列の末尾($)または空白。 $match[1]は必要な出力を保持します。

関連する問題