TemplateRegexMatcher.getStartRegex sometimes returns a regex that matches with an index before the license start
まだ誰も着手していません。
評価
調査の方向性
TemplateRegexMatcher.getStartRegexから始め、issueにある両方のJava例を再現してください。オプションのセクションと貪欲な変数マッチがどのように開始正規表現へ変換されるかを追跡してください。完了条件は、オプション部分が存在する場合の正しい動作も含め、例が開始インデックス3と2を報告することです。
索引モデルが issue の本文から書いたものです。
説明
Version 1.1.11
Example 1 greedy regex after optional:
String licenseText = "ab cd text";
String licenseTemplate = "<<beginOptional>>cd<<endOptional>> <<var;name=\"copyright\";original=\"Copyright (c) <year> <copyright holders> \";match=\".{0,5000}\">> text";
TemplateRegexMatcher templateRegexMatcher = new TemplateRegexMatcher(licenseTemplate);
String startRegex = templateRegexMatcher.getStartRegex(25);
System.out.println("start regex: " + startRegex);
Matcher matcher = Pattern.compile(startRegex).matcher(licenseText);
if (matcher.find()) {
System.out.println("start index found: " + matcher.start());
}
Returns
start regex: (?im)(\Qcd\E\s*)?(.{0,5000})\Qtext\E\s*
start index found: 0
but the start index should be 3.
Example 2 greedy regex at start:
String licenseText = "abtext";
String licenseTemplate = "<<var;name=\"copyright\";original=\"Copyright (c) <year> <copyright holders> \";match=\".{0,5000}\">> text";
TemplateRegexMatcher templateRegexMatcher = new TemplateRegexMatcher(licenseTemplate);
String startRegex = templateRegexMatcher.getStartRegex(25);
System.out.println("start regex: " + startRegex);
Matcher matcher = Pattern.compile(startRegex).matcher(licenseText);
if (matcher.find()) {
System.out.println("start index found: " + matcher.start());
}
Returns
start regex: (?im)(.?{0,5000})\Qtext\E\s*
start index found: 1
but the start index should be 2.
.?{0,5000} doesn't seem to work as expected. It is an unusual regex that some online regex websites say is invalid: https://regex101.com/r/l3810b/1, regexr.com/81kfo.
https://www.freeformatter.com/java-regex-tester.html says the regular expression is valid.
I think maybe to fix this you could just offer a method for a regex to find the beginning of the non-optional part. Otherwise a changing the regular expressions in these two cases to something like the following could work
(?im)((\Qcd\E\s*)(.{0,5000})\Qtext\E\s*)|(\Qtext\E\s*)
(?im)\Qtext\E\s*
In the first case if there were multiple optional parts it would get even more complicated to do it correctly.
- 主要言語
- Java
- スター
- 71
- フォーク
- 44
- 平均マージ
- 16時間 22分
- マージ済み PR(30日)
- 9
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
spdx/Spdx-Java-Library のほかの issue
-
question
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
spdx/Spdx-Java-Library#449 ·
-
question
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
spdx/Spdx-Java-Library#398 ·
-
wontfix
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
spdx/Spdx-Java-Library#393 · コメント 2 件 · リアクション 1 件 ·
-
matching
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
spdx/Spdx-Java-Library#392 · コメント 4 件 ·
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
spdx/Spdx-Java-Library#390 · コメント 11 件 · リアクション 1 件 ·
spdx/Spdx-Java-Library の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
utopia-rise/godot-jvm#1004 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
spring-projects/spring-grpc#442 ·
-
Expose numberOfPermits in RateLimiterEvent.toString() and the ratelimiterevents actuator DTO対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
resilience4j/resilience4j#2547 ·
メンテナーはふだん 9 日以内に返信
-
Clock.MakeDate continues execution and returns a rolled-over instant after dispatching error on invalid date対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
mit-cml/appinventor-sources#4155 ·
メンテナーはふだん 1 日以内に返信