回答編集履歴
5
もういやだ(書式ミス)
test
CHANGED
@@ -254,18 +254,10 @@
|
|
254
254
|
|
255
255
|
|
256
256
|
|
257
|
-
- [正規表現で文字列を含まない、否定の記述 ](https://uxmilk.jp/50674) - uxmilk.jp
|
257
|
+
- [正規表現で文字列を含まない、否定の記述 ](https://uxmilk.jp/50674) - uxmilk.jp - 否定の指定方法
|
258
|
-
|
259
|
-
|
258
|
+
|
260
|
-
|
261
|
-
- [正規表現の構造化および処理(マッチ・グループ・キャプチャ)](https://smdn.jp/programming/netfx/regex/1_operations/) - smdn.jp
|
259
|
+
- [正規表現の構造化および処理(マッチ・グループ・キャプチャ)](https://smdn.jp/programming/netfx/regex/1_operations/) - smdn.jp - グループ化の方法
|
262
|
-
|
263
|
-
|
260
|
+
|
264
|
-
|
265
|
-
- サクラエディタ→検索(Ctrl+F)→ヘルプ→「正規表現」
|
266
|
-
|
267
|
-
|
261
|
+
- サクラエディタ→検索(Ctrl+F)→ヘルプ→「正規表現」- 正規表現のおおまかな機能と記法(注意:サクラエディタ限定のものもある)
|
268
|
-
|
262
|
+
|
269
|
-
- [正規表現言語 - クイック リファレンス](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference) - docs.microsoft.com
|
263
|
+
- [正規表現言語 - クイック リファレンス](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference) - docs.microsoft.com - 説明が複雑奇怪すぎるので、サクラエディタのヘルプとクロスリファレンス
|
270
|
-
|
271
|
-
- 説明が複雑奇怪すぎるので、サクラエディタのヘルプとクロスリファレンス
|
4
忘れ去られてた参考文献(わすれてない)
test
CHANGED
@@ -243,3 +243,29 @@
|
|
243
243
|
|
244
244
|
|
245
245
|
```
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
参考文献
|
250
|
+
|
251
|
+
-----------------
|
252
|
+
|
253
|
+
本回答に辿り着く際に参照したリソース。
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
- [正規表現で文字列を含まない、否定の記述 ](https://uxmilk.jp/50674) - uxmilk.jp
|
258
|
+
|
259
|
+
- 否定の指定方法
|
260
|
+
|
261
|
+
- [正規表現の構造化および処理(マッチ・グループ・キャプチャ)](https://smdn.jp/programming/netfx/regex/1_operations/) - smdn.jp
|
262
|
+
|
263
|
+
- グループ化の方法
|
264
|
+
|
265
|
+
- サクラエディタ→検索(Ctrl+F)→ヘルプ→「正規表現」
|
266
|
+
|
267
|
+
- 正規表現のおおまかな機能と記法(注意:サクラエディタ限定のものもある)
|
268
|
+
|
269
|
+
- [正規表現言語 - クイック リファレンス](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference) - docs.microsoft.com
|
270
|
+
|
271
|
+
- 説明が複雑奇怪すぎるので、サクラエディタのヘルプとクロスリファレンス
|
3
実装1のリテラルを実装2と形式を合わせて違いがわかる?ように修正
test
CHANGED
@@ -60,11 +60,23 @@
|
|
60
60
|
|
61
61
|
// 正規表現 URLのみ: 正規表現の前方否定戻り読み「(?<!~)」でカッコやダブルクォーテーションがマッチしないようにする
|
62
62
|
|
63
|
-
var re
|
63
|
+
var expressionUrlOnly = "(?<![\(\\"]\s*)" + expressionUrlGroup + "(?!\s*[\)\\"])";
|
64
|
-
|
64
|
+
|
65
|
-
|
65
|
+
// ^^^^^^^ カッコやダブルクォーテーション
|
66
|
-
|
66
|
+
|
67
|
-
|
67
|
+
// ^^^^ スペースを入れた場合の考慮
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
// 正規表現 マークダウン
|
72
|
+
|
73
|
+
var expressionMarkdown = "\[(?<text>[^\]]*)\]\(\s*" + expressionUrlGroup + "\s*\)";
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
// 正規表現 URLのみ
|
78
|
+
|
79
|
+
var regexUrlOnly = new Regex(expressionUrlOnly,
|
68
80
|
|
69
81
|
RegexOptions.IgnoreCase // 大文字小文字を区別しない
|
70
82
|
|
@@ -74,7 +86,7 @@
|
|
74
86
|
|
75
87
|
// 正規表現 マークダウン
|
76
88
|
|
77
|
-
var regexMarkdown = new Regex(
|
89
|
+
var regexMarkdown = new Regex(expressionMarkdown,
|
78
90
|
|
79
91
|
RegexOptions.IgnoreCase // 大文字小文字を区別しない
|
80
92
|
|
2
実装2のコメント誤りを修正
test
CHANGED
@@ -176,8 +176,6 @@
|
|
176
176
|
|
177
177
|
|
178
178
|
|
179
|
-
// 正規表現 URLのみ: 正規表現の前方否定戻り読み「(?<!~)」でカッコやダブルクォーテーションがマッチしないようにする
|
180
|
-
|
181
179
|
var regexUrl = new Regex(expressonAll,
|
182
180
|
|
183
181
|
RegexOptions.IgnoreCase // 大文字小文字を区別しない
|
1
URLの正規表現を変更
test
CHANGED
@@ -34,8 +34,6 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
#なぜか、実装2のほうが100ms実行時間が長かった。理由は調べていないので、言及できません。
|
38
|
-
|
39
37
|
|
40
38
|
|
41
39
|
実装例1: 2段階で置換を行うパターン
|
@@ -50,43 +48,7 @@
|
|
50
48
|
|
51
49
|
{
|
52
50
|
|
53
|
-
var expressionUrl = "https?:
|
54
|
-
|
55
|
-
// ログイン関連
|
56
|
-
|
57
|
-
+ "((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|:)*@)?"
|
58
|
-
|
59
|
-
// ホスト名/IPv4/6
|
60
|
-
|
61
|
-
+ "(\[((([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
62
|
-
|
63
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
64
|
-
|
65
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
66
|
-
|
67
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
68
|
-
|
69
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
70
|
-
|
71
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
72
|
-
|
73
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
74
|
-
|
75
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)"
|
76
|
-
|
77
|
-
+ "|v[0-9a-f]+\.(([a-z]|[0-9]|[-._~])|[!$&'()*+,;=]|:)+)]|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
78
|
-
|
79
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}|(([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=])*)(:\d*)?"
|
80
|
-
|
81
|
-
// スラッシュ以降
|
82
|
-
|
83
|
-
+ "(\/((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|[:@]))*)*"
|
84
|
-
|
85
|
-
+ "(\?((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|[:@])|[\/?])*)?"
|
86
|
-
|
87
|
-
+ "(#((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|[:@])|[\/?])*)?"
|
88
|
-
|
89
|
-
; // from https://qiita.com/shimataro999/items/fced9665fa970c009c1e
|
51
|
+
var expressionUrl = "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";
|
90
52
|
|
91
53
|
|
92
54
|
|
@@ -182,43 +144,7 @@
|
|
182
144
|
|
183
145
|
{
|
184
146
|
|
185
|
-
var expressionUrl = "https?:
|
186
|
-
|
187
|
-
// ログイン関連
|
188
|
-
|
189
|
-
+ "((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|:)*@)?"
|
190
|
-
|
191
|
-
// ホスト名/IPv4/6
|
192
|
-
|
193
|
-
+ "(\[((([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
194
|
-
|
195
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
196
|
-
|
197
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
198
|
-
|
199
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
200
|
-
|
201
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
202
|
-
|
203
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
204
|
-
|
205
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
206
|
-
|
207
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)"
|
208
|
-
|
209
|
-
+ "|v[0-9a-f]+\.(([a-z]|[0-9]|[-._~])|[!$&'()*+,;=]|:)+)]|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
|
210
|
-
|
211
|
-
+ "(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}|(([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=])*)(:\d*)?"
|
212
|
-
|
213
|
-
// スラッシュ以降
|
214
|
-
|
215
|
-
+ "(\/((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|[:@]))*)*"
|
216
|
-
|
217
|
-
+ "(\?((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|[:@])|[\/?])*)?"
|
218
|
-
|
219
|
-
+ "(#((([a-z]|[0-9]|[-._~])|%[0-9a-f][0-9a-f]|[!$&'()*+,;=]|[:@])|[\/?])*)?"
|
220
|
-
|
221
|
-
; // from https://qiita.com/shimataro999/items/fced9665fa970c009c1e
|
147
|
+
var expressionUrl = "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";
|
222
148
|
|
223
149
|
|
224
150
|
|