回答編集履歴

6

a

2016/04/10 02:32

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  $str = 'そうですねabcの次はdefですね笑';
12
12
 
13
- preg_match('/([!-~]*)[^!-~]+笑\z/', $str, $matches);
13
+ preg_match('/([!-~]+)[^!-~]*笑\z/', $str, $matches);
14
14
 
15
15
  var_dump($matches);
16
16
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  var str = 'そうですねabcの次はdefですね笑';
26
26
 
27
- var regex = /([!-~]*)[^!-~]+笑$/;
27
+ var regex = /([!-~]+)[^!-~]*笑$/;
28
28
 
29
29
  console.log(str.match(regex));
30
30
 

5

a

2016/04/10 02:32

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,46 +1,6 @@
1
- PHP(PCREあるは鬼車を搭載した言語)だったらこう書くころです
1
+ ミスリーディングなこと書てたので消まし,結局皆さん同じですね…
2
2
 
3
-
4
-
5
- ```PHP
6
-
7
- <?php
8
-
9
- $str = 'そうですねabcの次はdefですね笑';
10
-
11
- preg_match('/\A(.*)(?<!^|[!-~])([!-~]+)(.*)(笑)\z/', $str, $matches);
12
-
13
- var_dump($matches);
14
-
15
- ```
16
-
17
-
18
-
19
- JavaScriptなど戻り読みを使えない言語の場合は,初っ端から1オフセットごとに後ろをチェックしてしまう`.*?`を使わざるを得ないので,効率が少し悪くなります.
20
-
21
-
22
-
23
- ```JavaScript
24
-
25
- var str = 'そうですねabcの次はdefですね笑';
26
-
27
- var regex = /^(.*?)([!-~]+)([^!-~]*)(笑)$/;
28
-
29
- console.log(str.match(regex));
30
-
31
- ```
32
-
33
-
34
-
35
- ---
36
-
37
-
38
-
39
- 【追記】
40
-
41
-
42
-
43
- def以外をキャプチャする必要がない場合は`.*?`に対する憂慮も無なりますね
3
+ 但し`\w`はアンダースコアも含んでしまうこと注意してださい
44
4
 
45
5
 
46
6
 

4

a

2016/04/10 02:31

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
  $str = 'そうですねabcの次はdefですね笑';
52
52
 
53
- preg_match('/([!-~]*)(?=[^!-~]+笑\z)/', $str, $matches);
53
+ preg_match('/([!-~]*)[^!-~]+笑\z/', $str, $matches);
54
54
 
55
55
  var_dump($matches);
56
56
 
@@ -64,7 +64,7 @@
64
64
 
65
65
  var str = 'そうですねabcの次はdefですね笑';
66
66
 
67
- var regex = /([!-~]*)(?=[^!-~]+笑$)/;
67
+ var regex = /([!-~]*)[^!-~]+笑$/;
68
68
 
69
69
  console.log(str.match(regex));
70
70
 

3

a

2016/04/10 02:28

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,4 +1,4 @@
1
- PHPだったらこう書くところです.
1
+ PHP(PCREあるいは鬼車を搭載した言語)だったらこう書くところです.
2
2
 
3
3
 
4
4
 
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- JavaScriptなど戻り読みを使えない言語の場合はちょっとややこしくなっちゃいますね.初っ端から1オフセットごとに後ろをチェックしてしまう`.*?`を使わざるを得ないので効率もあまり良くないです.
19
+ JavaScriptなど戻り読みを使えない言語の場合は初っ端から1オフセットごとに後ろをチェックしてしまう`.*?`を使わざるを得ないので効率が少し悪くなります.
20
20
 
21
21
 
22
22
 
@@ -31,3 +31,41 @@
31
31
  ```
32
32
 
33
33
 
34
+
35
+ ---
36
+
37
+
38
+
39
+ 【追記】
40
+
41
+
42
+
43
+ def以外をキャプチャする必要がない場合は`.*?`に対する憂慮も無くなりますね.
44
+
45
+
46
+
47
+ ```PHP
48
+
49
+ <?php
50
+
51
+ $str = 'そうですねabcの次はdefですね笑';
52
+
53
+ preg_match('/([!-~]*)(?=[^!-~]+笑\z)/', $str, $matches);
54
+
55
+ var_dump($matches);
56
+
57
+ ```
58
+
59
+
60
+
61
+
62
+
63
+ ```JavaScript
64
+
65
+ var str = 'そうですねabcの次はdefですね笑';
66
+
67
+ var regex = /([!-~]*)(?=[^!-~]+笑$)/;
68
+
69
+ console.log(str.match(regex));
70
+
71
+ ```

2

a

2016/04/10 02:26

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  $str = 'そうですねabcの次はdefですね笑';
10
10
 
11
- preg_match('/\A(.*)(?<!^|[0-9a-zA-Z!-~])([0-9a-zA-Z!-~]+)(.*)(笑)\z/', $str, $matches);
11
+ preg_match('/\A(.*)(?<!^|[!-~])([!-~]+)(.*)(笑)\z/', $str, $matches);
12
12
 
13
13
  var_dump($matches);
14
14
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  var str = 'そうですねabcの次はdefですね笑';
26
26
 
27
- var regex = /^(.*?)([0-9a-zA-Z!-~]+)([^0-9a-zA-Z!-~]*)(笑)$/;
27
+ var regex = /^(.*?)([!-~]+)([^!-~]*)(笑)$/;
28
28
 
29
29
  console.log(str.match(regex));
30
30
 

1

a

2016/04/10 02:18

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,19 +1,3 @@
1
- JavaScriptの正規表現はまだ戻り読みを使えないのでちょっとややこしくなっちゃいますね.初っ端から1オフセットごとに後ろをチェックしてしまう`.*?`を使わざるを得ないので効率もあまり良くないです.
2
-
3
-
4
-
5
- ```JavaScript
6
-
7
- var str = 'そうですねabcの次はdefですね笑';
8
-
9
- var regex = /^(.*?)([0-9a-zA-Z!-~]+)([^0-9a-zA-Z!-~]*)(笑)$/;
10
-
11
- console.log(str.match(regex));
12
-
13
- ```
14
-
15
-
16
-
17
1
  PHPだったらこう書くところです.
18
2
 
19
3
 
@@ -29,3 +13,21 @@
29
13
  var_dump($matches);
30
14
 
31
15
  ```
16
+
17
+
18
+
19
+ JavaScriptなど戻り読みを使えない言語の場合はちょっとややこしくなっちゃいますね.初っ端から1オフセットごとに後ろをチェックしてしまう`.*?`を使わざるを得ないので効率もあまり良くないです.
20
+
21
+
22
+
23
+ ```JavaScript
24
+
25
+ var str = 'そうですねabcの次はdefですね笑';
26
+
27
+ var regex = /^(.*?)([0-9a-zA-Z!-~]+)([^0-9a-zA-Z!-~]*)(笑)$/;
28
+
29
+ console.log(str.match(regex));
30
+
31
+ ```
32
+
33
+