teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記

2021/10/18 00:42

投稿

itagagaki
itagagaki

スコア8402

answer CHANGED
@@ -11,4 +11,11 @@
11
11
 
12
12
  `(<input\s+name="(.*?)".*?(?<!-)>)`
13
13
 
14
- 当然`=>`とかがあればそこで止まっちゃうことになります。
14
+ 当然`=>`とかがあればそこで止まっちゃうことになります。
15
+
16
+ 解説
17
+
18
+ 否定的後読み(?<!pattern)
19
+ というものが使用できます。
20
+
21
+ [正規表現の先読み・後読みを極める! - あらびき日記](https://abicky.net/2010/05/30/135112/)

3

コードを修正

2021/10/18 00:42

投稿

itagagaki
itagagaki

スコア8402

answer CHANGED
@@ -1,14 +1,14 @@
1
- そもそも`hoge`の後ろのダブルクオートで止まってます?
1
+ ~~そもそも`hoge`の後ろのダブルクオートで止まってます?~~
2
- あと`->`で止まるのは最短一致だから。
2
+ ~~あと`->`で止まるのは最短一致だから。~~
3
3
 
4
- `(<input\s+name="([^"]*?)".*>)` でいいのでは?
4
+ ~~`(<input\s+name="([^"]*?)".*>)` でいいのでは?~~
5
5
 
6
- 追記
6
+ 上のはちょっと勘違い
7
7
 
8
8
  単一のタグだけ取り出したいので最短一致にしないといけないのはわかります。
9
9
  しかしクオートで囲まれた中の文字を無視するという都合の良いことは正規表現ではできません。
10
10
  しょうがないので`->`ではない`>`を目指すしかないですね。
11
11
 
12
- `(<input\s+name="([^"]*?)".*?(?<!-)>)`
12
+ `(<input\s+name="(.*?)".*?(?<!-)>)`
13
13
 
14
14
  当然`=>`とかがあればそこで止まっちゃうことになります。

2

追記

2021/10/18 00:36

投稿

itagagaki
itagagaki

スコア8402

answer CHANGED
@@ -1,4 +1,14 @@
1
1
  そもそも`hoge`の後ろのダブルクオートで止まってます?
2
2
  あと`->`で止まるのは最短一致だから。
3
3
 
4
- `(<input\s+name="([^"]*?)".*>)` でいいのでは?
4
+ `(<input\s+name="([^"]*?)".*>)` でいいのでは?
5
+
6
+ (追記)
7
+
8
+ 単一のタグだけ取り出したいので最短一致にしないといけないのはわかります。
9
+ しかしクオートで囲まれた中の文字を無視するという都合の良いことは正規表現ではできません。
10
+ しょうがないので`->`ではない`>`を目指すしかないですね。
11
+
12
+ `(<input\s+name="([^"]*?)".*?(?<!-)>)`
13
+
14
+ 当然`=>`とかがあればそこで止まっちゃうことになります。

1

コードを修正

2021/10/18 00:32

投稿

itagagaki
itagagaki

スコア8402

answer CHANGED
@@ -1,3 +1,4 @@
1
1
  そもそも`hoge`の後ろのダブルクオートで止まってます?
2
+ あと`->`で止まるのは最短一致だから。
2
3
 
3
- `(<input\s+name="([^"]*?)".*?>)` でいいのでは?
4
+ `(<input\s+name="([^"]*?)".*>)` でいいのでは?