回答編集履歴

2

修正

2016/08/09 03:28

投稿

jawa
jawa

スコア3013

test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  取得対象を数値に限定して
64
64
 
65
- `(?<=[\d.])\d(?=[\d.])`
65
+ `(?<=\d)\d(?=\d)`
66
66
 
67
67
  とすると、"2"だけがヒットします。
68
68
 

1

ADD

2016/08/09 03:28

投稿

jawa
jawa

スコア3013

test CHANGED
@@ -37,3 +37,41 @@
37
37
  $result[4]=1
38
38
 
39
39
  のような結果を期待されるのであれば、noricyan2さん提示の方法でできるのではないでしょうか。
40
+
41
+
42
+
43
+ 追記
44
+
45
+ ---
46
+
47
+ 条件として
48
+
49
+ 「まだ読んでいない右部分に数値があって、既に読んだ部分に数値がある位置」
50
+
51
+ の言葉をそのままとらえると、正規表現としては
52
+
53
+ `(?<=\d).(?=\d)`
54
+
55
+ になると思います。(左側が数値で、右側も数値となる一文字)
56
+
57
+
58
+
59
+ これだけだと、例えば123.4を対象とした場合"2"と"."がヒットします。
60
+
61
+
62
+
63
+ 取得対象を数値に限定して
64
+
65
+ `(?<=[\d.])\d(?=[\d.])`
66
+
67
+ とすると、"2"だけがヒットします。
68
+
69
+
70
+
71
+ 目的の形にいちばん近い正規表現は
72
+
73
+ `(?<=[\d\.])?\d(?=[\d])?`
74
+
75
+ 「左側に1or0文字の数字またはピリオドがあり、右側に1or0文字の数字がある数値」でしょうか。
76
+
77
+