प्रौद्योगिकी साझेदारी

?

2024-07-12

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

नियमितव्यञ्जनेषु,? {0, 1} इत्यस्य समतुल्यं परिमाणं, 0 वा 1 वा, अथवा अन्येषां अर्थानां प्रतिनिधित्वार्थं विशेषवर्णरूपेण उपयोक्तुं शक्यते ।

अलोभी मिलान

?

उदाहरणं पश्यामः : १.

  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. }

निष्पादनस्य अनन्तरं उत्पादनम्: abcabc

किं न लघुतमः मेलः ? किमर्थं विफलम् अभवत् ?

अस्मिन् वस्तुतः अलोभपूर्णमेलनस्य नियमाः समाविष्टाः सन्ति- १.अलोभीमेलनस्य कृते अग्रिमनियमात् पूर्वं लघुतमः मार्गः मेलितः भवति यदि अग्रिमनियमः नास्ति तर्हि लोभीमेलनरूपेण संसाधितः भवति ।

अर्थात् यदि केवलं "क.*?"

सम्यक् प्रयोगं पश्यामः : १.

  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. }

निष्पादनस्य अनन्तरं उत्पादनम् : १.

  1. afcafc
  2. a
  3. fcafc

यथा भवान् पश्यति, प्रथमः ग्रहणसमूहः लघुतमं स्ट्रिंग् "a" गृह्णाति, द्वितीयः च ग्रहणसमूहः "fcafc" गृह्णाति ।

अन्ययोः परिस्थितियोः अवलोकनं कुर्मः ।

  • "(a.*)(.*)" प्रथमः ग्रहणसमूहः सर्वं गृह्णीयात्, द्वितीयः ग्रहणसमूहः त्रुटिं न निवेदयिष्यति, परन्तु किमपि न गृह्णीयात् ।
  • "(a.*?)(.*?)" प्रथमः ग्रहणसमूहः "a" गृह्णीयात्, द्वितीयः ग्रहणसमूहः च "fcafc" गृह्णीयात् यतः पश्चात् अन्ये नियमाः नास्ति, अतः लोभीमेलननुसारं संसाधितः भविष्यति .

मेलनं कुर्वन्तु परन्तु न गृह्णन्तु (?:pattern)

यदा ग्रहणसमूहे उपयुज्यते तदा ?: नियमितव्यञ्जनस्य पुरतः स्थाप्यते यत् मेलनं सूचयितुं किन्तु न ग्रहणं भवति, अर्थात् सङ्गतमूल्यानां एषः समूहः समूहविधिना प्राप्तुं न शक्यते

उदाहरणानि पश्यामः

  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. }

group(1) इत्यस्य माध्यमेन ग्रहणं कुर्वन् त्रुटिः निवेदिता भविष्यति, अर्थात् तस्य मेलनं कर्तुं शक्यते परन्तु गृहीतुं न शक्यते । यदि ?: निष्कासितम् अस्ति तर्हि समूह(1) मार्गेण सामान्यतया गृहीतुं शक्यते ।

एकपङ्क्तिविधानं (?s) सक्षमं कुर्वन्तु

(?s) दक्षिणपार्श्वे एकपङ्क्तिविधानं चालू करोति, येन .

उदाहरणं पश्यामः : १.

  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. }

ग्रहणकाले (?s) ग्रहणसमूहरूपेण गृहीतुं न शक्यते, अतः "((?s).*)" अधिकतया समूह(1) गृहीतुं शक्नोति, समूह(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. }

(?s) अपसारयित्वा, "abcnsdf" इत्यस्य मेलनं कर्तुं प्रयतध्वम् यतः नूतनपङ्क्तिवर्णः अस्ति, मेलनं सम्पन्नं कर्तुं न शक्यते, अतः किमपि आउटपुट् न भविष्यति ।