Technology sharing

?

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

In expressionibus regularibus,? Quantitas, 0 vel 1 temporibus repraesentare potest, {0, 1} aequivalens, vel peculiari charactere ad alias significationes repraesentandas adhiberi potest.

non-avarus matching

? sequitur quantitas alia qualificata indicat par non-avarus, id est, adaptans chorda quam brevissima indagata.

Inspice exemplum:

  1. @Test
  2. public void test() {
  3. Pattern pattern = Pattern.compile("a.*?");
  4. Matcher matcher = pattern.matcher("abcabc");
  5. if (matcher.matches()) {
  6. System.out.println(matcher.group());
  7. }
  8. }

Output post supplicium: abcabc

Nonne brevissima est par? Cur decidit?

Hoc revera regulas non-avaras adaptans;Nam non-avarus congruens, brevissima via aequatur ante regulam sequentem.

Hoc est dicere, si tantum "a.*?"

Rectum usum inspiciamus:

  1. @Test
  2. public void test() {
  3. Pattern pattern = Pattern.compile("(a.*?)(.*)");
  4. Matcher matcher = pattern.matcher("afcafc");
  5. if (matcher.matches()) {
  6. System.out.println(matcher.group(0));
  7. System.out.println(matcher.group(1));
  8. System.out.println(matcher.group(2));
  9. }
  10. }

Post supplicium output:

  1. afcafc
  2. a
  3. fcafc

Ut videre potes, primus coetus capit chordam brevissimam "a", et secunda coetus "fcafc" capit.

Alias ​​duas condiciones inspice:

  • " (a.*) (.*) " Prima caterva omnia capiet, secundus coetus captis errorem non referet sed nihil capiet.
  • " (a.*?) (.*?) "Primus coetus captis "a" capiet, et secundus coetus "fcafc" capiet. Cum non sint aliae regulae postea, procedendum erit secundum adaptionem avarorum .

Par autem non capere (?: Exemplum)

Cum in coetus capiendo adhibetur, praeponitur expressio regularis ?: congruens indicandi sed non capiendi, hoc est, hic coetus matching valorum per modum coetus obtineri non potest.

Exemplum videamus

  1. @Test
  2. public void test0() {
  3. Pattern pattern = Pattern.compile("\d{4}-(?:[a-z]+)");
  4. Matcher matcher = pattern.matcher("3214-opo");
  5. if (matcher.matches()) {
  6. System.out.println(matcher.group());
  7. System.out.println(matcher.group(1)); // 报错
  8. }
  9. }

Error in captione per coetus nuntiabitur, id est, aequari potest sed capi non potest. Si remoto, normaliter capi potest per coetus (1).

Admitte una linea modus (? S)

(?s) volvitur in unico lineae modo in dextro latere, faciens .

Inspice exemplum:

  1. private static final String DEFAULT_VARIABLE_PATTERN = "((?s).*)";
  2. /**
  3. * 从输出结果可知,匹配到了换行符 'n'
  4. */
  5. @Test
  6. public void test4() {
  7. Pattern pattern = Pattern.compile(DEFAULT_VARIABLE_PATTERN);
  8. Matcher matcher = pattern.matcher("abcnsdf");
  9. if (matcher.matches()) {
  10. System.out.println(matcher.group());
  11. System.out.println(matcher.group(1));
  12. System.out.println(matcher.group(2)); // (?s) 不能作为捕获组,报错
  13. }
  14. }

Cum captis, capi non potest ut coetus captivorum, sic "((?s).*)" coetus ad summum capere potest, et error nuntiabitur cum coetus captivorum (2).

  1. @Test
  2. public void test5() {
  3. Pattern pattern = Pattern.compile("(.*)");
  4. Matcher matcher = pattern.matcher("abcnsdf");
  5. if (matcher.matches()) {
  6. System.out.println(matcher.group());
  7. System.out.println(matcher.group(1));
  8. }
  9. }

Sublata (?s), conantur aequare "abcnsdf". Quia indoles nova est, adaptatio perfici non potest, ideo nihil erit output.