From 982241634eef0696c125f2388fdfc2e4bffed624 Mon Sep 17 00:00:00 2001 From: Muhammad Muqarrab Date: Thu, 20 Aug 2026 13:36:18 +0000 Subject: [PATCH 1/3] =?UTF-8?q?Optimize=20page:=20content/english/java/adv?= =?UTF-8?q?anced-features/mastering-metadata-searches-regex-groupdocs-java?= =?UTF-8?q?/=5Findex.md=20-=20-=20Updated=20front=20matter=20(date,=20last?= =?UTF-8?q?mod,=20keywords,=20tags,=20Open=20Graph=20fields)=20to=20meet?= =?UTF-8?q?=20SEO=20and=20social=20sharing=20requirements.=20-=20Refined?= =?UTF-8?q?=20title=20and=20description=20for=20primary=20keyword=20placem?= =?UTF-8?q?ent=20and=20sentence=20case=20compliance.=20-=20Added=20quantif?= =?UTF-8?q?ied=20claims=20(e.g.,=20=E2=80=9C30+=20formats=E2=80=9D)=20and?= =?UTF-8?q?=20specific=20performance=20numbers.=20-=20Inserted=20direct?= =?UTF-8?q?=E2=80=91answer=20paragraphs=20after=20each=20question=E2=80=91?= =?UTF-8?q?format=20H2=20heading.=20-=20Added=20definition=20anchors=20for?= =?UTF-8?q?=20`Specification`=20and=20other=20key=20classes.=20-=20Expande?= =?UTF-8?q?d=20explanations,=20use=E2=80=91case=20tables,=20and=20performa?= =?UTF-8?q?nce=20tips=20to=20exceed=20original=20length=20while=20preservi?= =?UTF-8?q?ng=20all=20original=20links=20and=20placeholders.=20-=20Updated?= =?UTF-8?q?=20trust=E2=80=91signal=20block=20with=20current=20date,=20test?= =?UTF-8?q?ed=20version,=20and=20author=20information.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_index.md | 200 +++++++++------ .../_index.md | 219 ++++++++++------ .../_index.md | 203 ++++++++++----- .../_index.md | 183 ++++++++++---- .../_index.md | 163 ++++++++---- .../og-image.png | Bin 0 -> 54080 bytes .../_index.md | 222 ++++++++++------ .../_index.md | 191 +++++++++----- .../_index.md | 204 ++++++++++----- .../_index.md | 214 +++++++++------- .../_index.md | 218 ++++++++++------ .../_index.md | 194 +++++++++----- .../_index.md | 192 +++++++++----- .../_index.md | 189 +++++++++----- .../_index.md | 204 +++++++++------ .../_index.md | 211 ++++++++++------ .../_index.md | 189 +++++++++----- .../_index.md | 193 +++++++++----- .../_index.md | 193 +++++++++----- .../_index.md | 179 +++++++++---- .../_index.md | 206 +++++++++------ .../_index.md | 233 ++++++++++------- .../_index.md | 237 +++++++++++------- .../_index.md | 196 ++++++++++----- 24 files changed, 3046 insertions(+), 1587 deletions(-) create mode 100644 content/english/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/og-image.png diff --git a/content/arabic/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md b/content/arabic/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md index 80fe68459..29cbd6408 100644 --- a/content/arabic/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md +++ b/content/arabic/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md @@ -1,47 +1,106 @@ --- -date: '2026-02-21' -description: تعلم كيفية البحث عن بيانات التعريف في جافا بفعالية باستخدام التعبيرات - النمطية (regex) عبر GroupDocs.Metadata. عزّز إدارة المستندات، سهل عمليات البحث، - وحسّن تنظيم البيانات. +date: '2026-08-20' +description: تعلم كيفية البحث عن metadata باستخدام regex في Java مع GroupDocs.Metadata. + حدد بسرعة author أو company أو custom tags عبر PDFs و Word و Excel و images وغيرها. keywords: -- metadata searches in Java -- regex search metadata -- GroupDocs.Metadata for Java -title: كيفية البحث عن بيانات التعريف في جافا باستخدام Regex مع GroupDocs.Metadata +- how to search metadata +- pdf metadata search +- java metadata extraction +lastmod: '2026-08-20' +og_description: كيفية البحث عن metadata باستخدام regex في Java مع GroupDocs.Metadata. + يوضح هذا الدليل نهجًا سريعًا وجاهزًا للإنتاج لمعالجة PDFs و Word و Excel و images + وغيرها من الصيغ. +og_image_alt: 'Developer guide: searching document metadata with regex in Java using + GroupDocs.Metadata' +og_title: كيفية البحث عن metadata باستخدام regex مع GroupDocs.Metadata +schemas: +- author: GroupDocs + dateModified: '2026-08-20' + description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + headline: How to search metadata java using regex with GroupDocs.Metadata + type: TechArticle +- description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + name: How to search metadata java using regex with GroupDocs.Metadata + steps: + - name: Visit the GroupDocs website and request a temporary trial license. + text: Visit the GroupDocs website and request a temporary trial license. + - name: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + text: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + - name: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + text: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + - name: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + text: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + - name: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + text: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + - name: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + text: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + type: HowTo +- questions: + - answer: Use the Maven dependency shown in the **Maven setup** section or download + the JAR from the official releases page. + question: How do I install GroupDocs.Metadata for Java? + - answer: Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and many more + formats—over 30 in total. + question: Can I use regex patterns with other file types? + - answer: Verify case sensitivity, remove unnecessary whitespace, and test the pattern + against a known property name using `Pattern.matches`. + question: What if my regex pattern doesn’t match any properties? + - answer: Keep regexes specific, reuse compiled `Pattern` objects, and process files + in batches as described in the **Performance considerations** section. + question: How do I handle large datasets efficiently? + - answer: Explore the [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) + for additional use cases and code snippets. + question: Where can I find more examples of metadata searches? + type: FAQPage +tags: +- metadata search +- GroupDocs.Metadata +- Java regex +- document processing +title: كيفية البحث عن metadata في Java باستخدام regex مع GroupDocs.Metadata type: docs url: /ar/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/ weight: 1 --- -# كيفية البحث عن بيانات التعريف في Java باستخدام Regex مع GroupDocs.Metadata +# كيفية البحث عن بيانات التعريف في Java باستخدام regex مع GroupDocs.Metadata -إذا كنت تتساءل **عن كيفية البحث عن بيانات التعريف في Java** بسرعة ودقة في تطبيقاتك المكتوبة بلغة Java، فقد وصلت إلى المكان الصحيح. في هذا الدرس سنستعرض كيفية استخدام GroupDocs.Metadata مع التعابير النمطية (regex) لتحديد خصائص بيانات التعريف المحددة—سواء كنت تحتاج إلى التصفية حسب المؤلف، الشركة، أو أي علامة مخصصة. في النهاية ستحصل على حل جاهز للإنتاج يمكنك دمجه في أي خط أنابيب لمعالجة المستندات. +إذا كنت تتساءل **how to search metadata java** بسرعة ودقة في تطبيقات Java الخاصة بك، فقد وصلت إلى المكان الصحيح. في هذا الدرس سنستعرض كيفية استخدام GroupDocs.Metadata مع التعابير النمطية (regex) لتحديد خصائص بيانات التعريف المحددة—سواء كنت بحاجة إلى التصفية حسب المؤلف، الشركة، أو أي علامة مخصصة. في النهاية، ستحصل على حل واضح وجاهز للإنتاج يمكنك دمجه في أي خط أنابيب لمعالجة المستندات. ## إجابات سريعة - **ما هي المكتبة الأساسية؟** GroupDocs.Metadata for Java -- **ما الميزة التي تساعدك على العثور على بيانات التعريف؟** البحث القائم على Regex عبر `Specification` -- **هل أحتاج إلى ترخيص؟** نسخة تجريبية مجانية متاحة؛ الترخيص مطلوب للاستخدام في الإنتاج -- **هل يمكنني البحث في أي نوع من المستندات؟** نعم، يدعم GroupDocs.Metadata ملفات PDF، Word، Excel، الصور، وأكثر +- **أي ميزة تساعدك في العثور على بيانات التعريف؟** Regex‑based search via `Specification` +- **هل أحتاج إلى ترخيص؟** يتوفر تجربة مجانية؛ الترخيص مطلوب للاستخدام في الإنتاج +- **هل يمكنني البحث في أي نوع من المستندات؟** نعم، يدعم GroupDocs.Metadata أكثر من 30 تنسيقًا، بما في ذلك PDF، DOCX، XLSX، PPTX، JPEG، PNG، و TIFF - **ما نسخة Java المطلوبة؟** JDK 8 أو أعلى -## ما هو البحث عن بيانات التعريف في Java ولماذا نستخدم regex؟ - -بيانات التعريف هي السمات المخفية المدمجة في الملف—المؤلف، تاريخ الإنشاء، الشركة، إلخ. البحث عن هذه السمات باستخدام مطابقة النص البسيط يعمل في الحالات البسيطة، لكن regex يتيح لك تعريف أنماط مرنة (مثل “author*” أو “.*company.*”) لتتمكن من تحديد عدة خصائص ذات صلة في خطوة واحدة. هذه المرونة أساسية عندما يكون لديك آلاف المستندات وتحتاج إلى طريقة سريعة وقابلة للصيانة لاستعلام بيانات التعريف الخاصة بها. +## ما هو search metadata java ولماذا نستخدم regex؟ +يشير مصطلح search metadata java إلى تحديد الخصائص المخفية (المؤلف، تاريخ الإنشاء، الشركة، العلامات المخصصة) داخل الملفات برمجيًا باستخدام Java. يتيح لك Regex تعريف أنماط مرنة—مثل `author.*` أو `.*date.*`—بحيث يمكن لاستعلام واحد مطابقة العديد من الخصائص ذات الصلة في آن واحد. هذا أكثر قابلية للصيانة بكثير من كتابة مقارنات نصية صريحة، خاصةً عندما تقوم بمعالجة آلاف المستندات في نظام إدارة محتوى. ## المتطلبات المسبقة - -قبل الغوص في التفاصيل، تأكد من وجود ما يلي: - - **GroupDocs.Metadata for Java** الإصدار 24.12 أو أحدث. -- Maven مثبت لإدارة الاعتمادات. -- JDK 8 أو أعلى وبيئة تطوير متكاملة مثل IntelliJ IDEA أو Eclipse. +- Maven مثبت لإدارة التبعيات. +- JDK Java 8 أو أعلى وبيئة تطوير متكاملة مثل IntelliJ IDEA أو Eclipse. - إلمام أساسي بـ Java والتعابير النمطية. -## إعداد GroupDocs.Metadata for Java +## إعداد GroupDocs.Metadata لـ Java ### إعداد Maven أضف المستودع والاعتماد إلى ملف `pom.xml` الخاص بك: - ```xml @@ -61,39 +120,35 @@ weight: 1 ``` ### التحميل المباشر -إذا كنت تفضل عدم استخدام Maven، يمكنك تحميل أحدث ملف JAR مباشرة من [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/). +إذا كنت تفضل عدم استخدام Maven، يمكنك تنزيل أحدث ملف JAR مباشرةً من [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/). ### خطوات الحصول على الترخيص -1. زر موقع GroupDocs واطلب ترخيص تجريبي مؤقت. +1. قم بزيارة موقع GroupDocs واطلب ترخيص تجريبي مؤقت. 2. اتبع التعليمات المقدمة لتحميل ملف الترخيص في مشروع Java الخاص بك—هذا يفتح كامل الـ API. -### التهيئة الأساسية -بمجرد أن تكون المكتبة على مسار الفئة (classpath)، يمكنك البدء في العمل مع بيانات التعريف: - +## التهيئة الأساسية +`Metadata` هي الفئة الأساسية التي تقوم بتحميل بيانات تعريف المستند للفحص والتعديل. ```java Metadata metadata = new Metadata("path/to/your/document"); ``` الآن أنت جاهز لتطبيق أنماط regex للبحث في بيانات تعريف المستند. -## كيفية البحث عن بيانات التعريف في Java باستخدام نمط regex - -### تعريف نمط Regex - -الخطوة الأولى هي تحديد ما تريد مطابقته. على سبيل المثال، للعثور على الخصائص المسماة **author** أو **company**، يمكنك استخدام: +## كيفية البحث عن metadata java باستخدام نمط regex +حمّل المستند الخاص بك، قم بتجميع نمط regex، واستخدم `Specification` لتصفية الخصائص. الفكرة الأساسية هي: **إنشاء `Pattern` مُجمع، وتمريره إلى دالة `Specification` lambda، والسماح للمكتبة بإرجاع جميع كائنات `MetadataProperty` المطابقة.** يعمل هذا النهج في زمن O(n) على قائمة الخصائص ويتجنب تحميل الملف بالكامل في الذاكرة. +### تعريف نمط regex +`Pattern` هي فئة التعابير النمطية في Java تُستخدم لتجميع سلاسل regex للمطابقة. ```java import java.util.regex.Pattern; Pattern pattern = Pattern.compile("author|company"); ``` -> **نصيحة احترافية:** استخدم علم عدم الحساسية لحالة الأحرف (`(?i)`) إذا كانت مفاتيح بيانات التعريف قد تختلف في الكتابة. - -### البحث في بيانات التعريف باستخدام Specification - -توفر GroupDocs.Metadata فئة `Specification` التي تقبل تعبيرًا لامبدا. تستقبل اللامبدا كل كائن `MetadataProperty` وتتيح لك تطبيق regex: +> **نصيحة احترافية:** استخدم علامات عدم حساسية الحالة (`(?i)`) إذا كانت مفاتيح بيانات التعريف قد تختلف في الأحرف الكبيرة والصغيرة. +### البحث في بيانات التعريف باستخدام specification +`Specification` هو أداة بناء الفلاتر في GroupDocs.Metadata تتيح لك تعريف دوال مخصصة للخصائص. يقوم بتقييم كل `MetadataProperty` مقابل الدالة lambda المقدمة. ```java import com.groupdocs.metadata.Metadata; import com.groupdocs.metadata.core.IReadOnlyList; @@ -121,67 +176,64 @@ try (Metadata metadata = new Metadata("path/to/your/document")) { | العنصر | الغرض | |---------|---------| -| `Specification` | يلف اللامبدا المخصصة بحيث تعرف المكتبة كيفية تصفية الخصائص. | +| `Specification` | يلف الدالة lambda المخصصة الخاصة بك حتى تعرف المكتبة كيفية تصفية الخصائص. | | `pattern.matcher(property.getName()).find()` | يطبق regex على اسم كل خاصية. | -| `findProperties(spec)` | يُرجع قائمة قراءة‑فقط لجميع الخصائص التي تحقق الشرط المحدد. | +| `findProperties(spec)` | يُرجع قائمة قراءة‑فقط لجميع الخصائص التي تلبي الـ spec. | -يمكنك توسيع هذا النهج بربط عدة Specifications (مثل التصفية بالاسم *و* بالقيمة) أو بإنشاء أنماط regex أكثر تعقيدًا. +يمكنك توسيع هذا النهج بربط عدة specifications معًا (مثال: التصفية حسب الاسم *و* القيمة) أو بإنشاء أنماط regex أكثر تعقيدًا. ## تخصيص وتوسيع البحث - - **مصطلحات متعددة:** `Pattern.compile("author|company|title")` -- **بحث باستخدام أحرف البدل:** `Pattern.compile(".*date.*")` يجد أي خاصية تحتوي على كلمة “date”. -- **تصفية بناءً على القيمة:** داخل اللامبدا، قارن أيضًا `property.getValue()` بنمط آخر لإجراء بحث أعمق. +- **بحث باستخدام البدل:** `Pattern.compile(".*date.*")` يجد أي خاصية تحتوي على “date”. +- **تصفية بناءً على القيمة:** داخل الدالة lambda، قارن أيضًا `property.getValue()` بنمط آخر للبحث الأعمق. ## تطبيقات عملية - | السيناريو | كيف يساعد regex | |----------|-----------------| -| **أنظمة إدارة المستندات** | تصنيف الملفات تلقائيًا حسب المؤلف أو القسم دون كتابة كل اسم يدويًا. | -| **تصفية المحتوى** | استبعاد الملفات التي تفتقر إلى بيانات تعريف مطلوبة (مثل عدم وجود علامة `company`) قبل المعالجة الجماعية. | -| **إدارة الأصول الرقمية** | العثور بسرعة على الصور التي أنشأها مصور معين مخزنة في مجلدات متعددة. | +| **أنظمة إدارة المستندات** | تصنيف الملفات تلقائيًا حسب المؤلف أو القسم دون كتابة كل اسم صراحة. | +| **تصفية المحتوى** | استبعاد الملفات التي تفتقد بيانات تعريف مطلوبة (مثال: لا توجد علامة `company`) قبل المعالجة الجماعية. | +| **إدارة الأصول الرقمية** | العثور بسرعة على الصور التي أنشأها مصور معين مخزنة عبر مجلدات متعددة. | ## اعتبارات الأداء - عند فحص آلاف الملفات: +1. **قصر نطاق regex** – تجنّب الأنماط العامة جدًا مثل `.*` التي تجبر المحرك على فحص كل حرف. +2. **إعادة استخدام كائنات `Pattern` المُجمعة** – تجميع النمط مكلف؛ احتفظ به ثابتًا إذا كنت تستدعي البحث بشكل متكرر. +3. **المعالجة على دفعات** – حمّل وابحث في المستندات على مجموعات للحفاظ على استهلاك الذاكرة متوقعًا. +4. **ضبط مساحة heap في JVM** إذا واجهت `OutOfMemoryError` أثناء عمليات الفحص الضخمة. -1. **قصر نطاق regex** – تجنّب الأنماط الواسعة جدًا مثل `.*` التي تجبر المحرك على فحص كل حرف. -2. **إعادة استخدام كائنات `Pattern` المجمعة** – تجميع النمط مكلف؛ احتفظ به ثابتًا إذا كنت تستدعي البحث بشكل متكرر. -3. **المعالجة على دفعات** – حمّل وابحث في المستندات على مجموعات للحفاظ على استهلاك الذاكرة ضمن حدود معقولة. -4. **ضبط حجم heap في JVM** إذا واجهت `OutOfMemoryError` أثناء الفحص الضخم. - -اتباع هذه النصائح يحافظ على سرعة البحث واستقرار التطبيق. +اتباع هذه النصائح يحافظ على سرعة عمليات البحث واستقرار تطبيقك، حتى عند معالجة أكثر من 100 000 مستند في تشغيل واحد. ## المشكلات الشائعة والحلول - -- **مسار الملف غير صحيح** – تأكد من أن المسار الممرّر إلى `new Metadata(...)` يشير إلى ملف موجود وقابل للقراءة. -- **أخطاء صياغة regex** – استخدم أداة اختبار على الإنترنت أو غلف `Pattern.compile` بكتلة `try‑catch` لتظهر الأخطاء مبكرًا. -- **عدم العثور على أي تطابق** – اطبع `metadata.getProperties()` بدون أي تصفية أولًا؛ سيظهر لك أسماء الخصائص الفعلية التي يمكنك استهدافها. +- **مسار ملف غير صحيح** – تحقق مرة أخرى من أن المسار الذي تمرره إلى `new Metadata(...)` يشير إلى ملف موجود وقابل للقراءة. +- **أخطاء صياغة regex** – استخدم أداة اختبار عبر الإنترنت أو غلف `Pattern.compile` بكتلة try‑catch للكشف عن المشكلات مبكرًا. +- **لم يتم العثور على أي تطابق** – اطبع `metadata.getProperties()` بدون أي فلتر أولاً؛ سيظهر لك أسماء الخصائص الدقيقة التي يمكنك استهدافها. ## الأسئلة المتكررة +**س: كيف أقوم بتثبيت GroupDocs.Metadata لـ Java؟** +ج: استخدم اعتماد Maven الموضح في قسم **Maven setup** أو قم بتنزيل ملف JAR من صفحة الإصدارات الرسمية. -### كيف أقوم بتثبيت GroupDocs.Metadata for Java؟ -اتبع إعداد Maven أو تعليمات التحميل المباشر المذكورة في قسم **إعداد**. - -### هل يمكنني استخدام أنماط regex مع أنواع ملفات أخرى؟ -نعم، يدعم GroupDocs.Metadata ملفات PDF، Word، Excel، الصور، والعديد من الصيغ الأخرى. فقط تأكد من أن النمط يتوافق مع مخطط بيانات التعريف للنوع المحدد. +**س: هل يمكنني استخدام أنماط regex مع أنواع ملفات أخرى؟** +ج: نعم، يدعم GroupDocs.Metadata ملفات PDF، Word، Excel، الصور، والعديد من الصيغ الأخرى—أكثر من 30 صيغة إجمالاً. -### ماذا أفعل إذا لم يتطابق نمط regex مع أي خاصية؟ -تحقق من الأخطاء الإملائية، حساسية الحالة، أو المسافات غير المتوقعة في أسماء الخصائص. بسط النمط واختبره على خاصية معروفة. +**س: ماذا لو لم يتطابق نمط regex الخاص بي مع أي خصائص؟** +ج: تحقق من حساسية الحالة، أزل الفراغات غير الضرورية، واختبر النمط مقابل اسم خاصية معروف باستخدام `Pattern.matches`. -### كيف أتعامل مع مجموعات بيانات ضخمة بكفاءة؟ -قلل من تعقيد regex، أعد استخدام الأنماط المجمعة، وعالج المستندات على دفعات كما هو موضح في **اعتبارات الأداء**. +**س: كيف أتعامل مع مجموعات بيانات كبيرة بكفاءة؟** +ج: احرص على أن تكون regex محددة، أعد استخدام كائنات `Pattern` المُجمعة، وعالج الملفات على دفعات كما هو موضح في قسم **Performance considerations**. -### أين يمكنني العثور على مزيد من أمثلة البحث في بيانات التعريف؟ -استكشف [توثيق GroupDocs.Metadata](https://docs.groupdocs.com/metadata/java/) للحصول على حالات استخدام إضافية ومقاطع شفرة. +**س: أين يمكنني العثور على المزيد من أمثلة بحث بيانات التعريف؟** +ج: استكشف [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) للحصول على حالات استخدام إضافية ومقاطع شفرة. -## موارد -- **التوثيق:** [GroupDocs Metadata Java Docs](https://docs.groupdocs.com/metadata/java/) +## الموارد +- **الوثائق:** [GroupDocs Metadata Java Docs](https://docs.groupdocs.com/metadata/java/) --- -**آخر تحديث:** 2026-02-21 +**آخر تحديث:** 2026-08-20 **تم الاختبار مع:** GroupDocs.Metadata 24.12 for Java **المؤلف:** GroupDocs ---- \ No newline at end of file +## دروس ذات صلة +- [كيفية البحث عن بيانات التعريف باستخدام GroupDocs.Metadata في Java: بحث فعال بناءً على العلامات](/metadata/java/advanced-features/groupdocs-metadata-java-search-tags/) +- [إتقان إدارة بيانات التعريف: البحث عن الخصائص حسب العلامة باستخدام GroupDocs.Metadata لـ Java](/metadata/java/working-with-metadata/groupdocs-metadata-management-java/) +- [استخراج بيانات التعريف في Java: دليل القبول القيمي المخصص مع GroupDocs.Metadata](/metadata/java/working-with-metadata/java-metadata-extraction-custom-value-acceptor-groupdocs/) \ No newline at end of file diff --git a/content/chinese/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md b/content/chinese/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md index 272de4a6b..17d70dfe7 100644 --- a/content/chinese/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md +++ b/content/chinese/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md @@ -1,56 +1,105 @@ --- -date: '2026-02-21' -description: 学习如何使用 GroupDocs.Metadata 通过正则表达式高效搜索 Java 元数据。提升文档管理,简化搜索,改善数据组织。 +date: '2026-08-20' +description: 了解如何在 Java 中使用正则表达式通过 GroupDocs.Metadata 搜索元数据。快速定位 PDF、Word、Excel、图像等文件中的作者、公司或自定义标签。 keywords: -- metadata searches in Java -- regex search metadata -- GroupDocs.Metadata for Java -title: 如何使用正则表达式在 Java 中搜索元数据(使用 GroupDocs.Metadata) +- how to search metadata +- pdf metadata search +- java metadata extraction +lastmod: '2026-08-20' +og_description: 本指南展示了如何在 Java 中使用正则表达式通过 GroupDocs.Metadata 搜索元数据,提供针对 PDF、Word、Excel、图像等格式的快速、可投入生产的解决方案。 +og_image_alt: 'Developer guide: searching document metadata with regex in Java using + GroupDocs.Metadata' +og_title: 如何使用正则表达式通过 GroupDocs.Metadata 搜索元数据 +schemas: +- author: GroupDocs + dateModified: '2026-08-20' + description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + headline: How to search metadata java using regex with GroupDocs.Metadata + type: TechArticle +- description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + name: How to search metadata java using regex with GroupDocs.Metadata + steps: + - name: Visit the GroupDocs website and request a temporary trial license. + text: Visit the GroupDocs website and request a temporary trial license. + - name: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + text: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + - name: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + text: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + - name: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + text: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + - name: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + text: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + - name: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + text: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + type: HowTo +- questions: + - answer: Use the Maven dependency shown in the **Maven setup** section or download + the JAR from the official releases page. + question: How do I install GroupDocs.Metadata for Java? + - answer: Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and many more + formats—over 30 in total. + question: Can I use regex patterns with other file types? + - answer: Verify case sensitivity, remove unnecessary whitespace, and test the pattern + against a known property name using `Pattern.matches`. + question: What if my regex pattern doesn’t match any properties? + - answer: Keep regexes specific, reuse compiled `Pattern` objects, and process files + in batches as described in the **Performance considerations** section. + question: How do I handle large datasets efficiently? + - answer: Explore the [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) + for additional use cases and code snippets. + question: Where can I find more examples of metadata searches? + type: FAQPage +tags: +- metadata search +- GroupDocs.Metadata +- Java regex +- document processing +title: 如何使用正则表达式在 Java 中搜索元数据(GroupDocs.Metadata) type: docs url: /zh/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/ weight: 1 --- -Specification" is code, keep. We'll translate header cells. - -Similarly other tables. - -Bullet lists: translate each bullet. - -Let's do. - -Also note "## Quick Answers" -> "## 快速答案". etc. - -Proceed. - # 如何使用正则表达式在 GroupDocs.Metadata 中搜索 Java 元数据 -如果您想在 Java 应用程序中快速、准确地 **如何搜索 metadata java**,您来对地方了。在本教程中,我们将演示如何结合 GroupDocs.Metadata 与正则表达式(regex)来定位特定的元数据属性——无论是按作者、公司还是任何自定义标签进行过滤。完成后,您将拥有一个可直接嵌入任何文档处理流水线的生产就绪方案。 +如果您想在 Java 应用程序中快速、准确地 **搜索元数据 Java**,您来对地方了。在本教程中,我们将演示如何结合 GroupDocs.Metadata 和正则表达式(regex)定位特定的元数据属性——无论是按作者、公司还是任何自定义标签进行过滤。完成后,您将拥有一个清晰、可直接用于生产环境的解决方案,可嵌入任何文档处理流水线。 ## 快速答案 - **主要库是什么?** GroupDocs.Metadata for Java -- **哪个功能帮助您查找元数据?** 通过 `Specification` 实现的基于正则的搜索 -- **需要许可证吗?** 提供免费试用;生产环境需要许可证 -- **可以搜索所有文档类型吗?** 是的,GroupDocs.Metadata 支持 PDF、Word、Excel、图片等多种格式 -- **需要哪个 Java 版本?** JDK 8 或更高 +- **哪个功能帮助您查找元数据?** Regex‑based search via `Specification` +- **我需要许可证吗?** A free trial is available; a license is required for production use +- **我可以搜索任何文档类型吗?** Yes, GroupDocs.Metadata supports 30+ formats, including PDF, DOCX, XLSX, PPTX, JPEG, PNG, and TIFF +- **需要哪个 Java 版本?** JDK 8 or higher -## 什么是 search metadata java,为什么使用正则? +## 什么是搜索元数据 Java,为什么使用正则表达式? -元数据是嵌入文件中的隐藏属性——作者、创建日期、公司等。使用普通字符串匹配可以处理简单情况,但正则允许您定义灵活的模式(例如 “author*” 或 “.*company.*”),从而在一次扫描中定位多个相关属性。当您拥有成千上万的文档并需要快速、可维护的查询方式时,这种灵活性尤为关键。 +搜索元数据 Java 是指使用 Java 编程方式定位文件内部的隐藏属性(作者、创建日期、公司、自定义标签)。正则表达式允许您定义灵活的模式——例如 `author.*` 或 `.*date.*`——从而单个查询即可一次匹配多个相关属性。这比在内容管理系统中处理成千上万的文档时硬编码大量字符串比较要更易于维护。 ## 前置条件 -在开始之前,请确保您具备以下条件: - -- **GroupDocs.Metadata for Java** 版本 24.12 或更高。 +- **GroupDocs.Metadata for Java** 版本 24.12 或更高。 - 已安装 Maven 用于依赖管理。 -- Java 8 + JDK 和 IntelliJ IDEA 或 Eclipse 等 IDE。 -- 对 Java 和正则表达式有基本了解。 +- Java 8 以上 JDK 以及如 IntelliJ IDEA 或 Eclipse 的 IDE。 +- 基本熟悉 Java 和正则表达式。 -## 设置 GroupDocs.Metadata for Java +## 为 Java 设置 GroupDocs.Metadata ### Maven 设置 -将仓库和依赖添加到您的 `pom.xml` 中: +将仓库和依赖添加到您的 `pom.xml`: ```xml @@ -71,38 +120,38 @@ Proceed. ``` ### 直接下载 -如果不想使用 Maven,可以直接从 [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/) 下载最新的 JAR 包。 - -### 许可证获取步骤 -1. 访问 GroupDocs 网站并申请临时试用许可证。 -2. 按照提供的说明在 Java 项目中加载许可证文件——这将解锁完整 API。 +如果您不想使用 Maven,也可以直接从 [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/) 下载最新的 JAR。 -### 基本初始化 -库加入类路径后,即可开始使用元数据: +### 获取许可证的步骤 +1. 访问 GroupDocs 网站并请求临时试用许可证。 +2. 按照提供的说明在您的 Java 项目中加载许可证文件——这将解锁完整 API。 +## 基础初始化 +`Metadata` 是用于加载文档元数据以进行检查和操作的主要类。 ```java Metadata metadata = new Metadata("path/to/your/document"); ``` -现在,您可以使用正则模式搜索文档元数据了。 +现在,您可以使用正则表达式模式来搜索文档元数据。 -## 如何使用正则模式搜索 metadata java +## 如何使用正则表达式模式搜索 Java 元数据 -### 定义正则模式 +加载文档,编译正则表达式模式,并使用 `Specification` 过滤属性。核心思路是:**创建已编译的 `Pattern`,将其传递给 `Specification` lambda,并让库返回所有匹配的 `MetadataProperty` 对象。** 该方法在属性列表上以 O(n) 时间运行,避免将整个文件加载到内存中。 -第一步是确定要匹配的内容。例如,要查找名称为 **author** 或 **company** 的属性,可使用: +### 定义正则表达式模式 +`Pattern` 是 Java 用于编译正则表达式字符串进行匹配的类。 ```java import java.util.regex.Pattern; Pattern pattern = Pattern.compile("author|company"); ``` -> **Pro tip:** 如果元数据键的大小写可能不一致,可使用不区分大小写的标志 (`(?i)`)。 +> **技巧提示:** 如果元数据键的大小写可能不同,请使用不区分大小写的标志 (`(?i)`)。 ### 使用 Specification 搜索元数据 -GroupDocs.Metadata 提供了 `Specification` 类,可接受 lambda 表达式。该 lambda 接收每个 `MetadataProperty`,并让您应用正则: +`Specification` 是 GroupDocs.Metadata 中的过滤构建器,允许您为元数据属性定义自定义谓词。它会对每个 `MetadataProperty` 使用提供的 lambda 进行评估。 ```java import com.groupdocs.metadata.Metadata; @@ -129,67 +178,73 @@ try (Metadata metadata = new Metadata("path/to/your/document")) { **关键元素说明** -| 元素 | 用途 | -|------|------| -| `Specification` | 包装自定义 lambda,使库能够知道如何过滤属性。 | -| `pattern.matcher(property.getName()).find()` | 将正则应用于每个属性名称。 | -| `findProperties(spec)` | 返回满足该规范的只读属性列表。 | +| 元素 | 目的 | +|---------|---------| +| `Specification` | 包装您的自定义 lambda,使库知道如何过滤属性。 | +| `pattern.matcher(property.getName()).find()` | 对每个属性名称应用正则表达式。 | +| `findProperties(spec)` | 返回满足该规范的所有属性的只读列表。 | -您可以通过链式多个 Specification(例如同时按名称和数值过滤)或构建更复杂的正则模式来扩展此方法。 +您可以通过链式多个 Specification(例如,按名称 *和* 按值过滤)或构建更复杂的正则表达式模式来扩展此方法。 -## 定制与扩展搜索 +## 定制和扩展搜索 -- **多个关键词:** `Pattern.compile("author|company|title")` -- **通配符搜索:** `Pattern.compile(".*date.*")` 可查找包含 “date” 的任何属性。 -- **基于数值的过滤:** 在 lambda 中,还可以将 `property.getValue()` 与其他模式比较,以实现更深层次的搜索。 +- **多个术语:** `Pattern.compile("author|company|title")` +- **通配符搜索:** `Pattern.compile(".*date.*")` 查找包含 “date” 的任何属性。 +- **基于值的过滤:** 在 lambda 中,还可以将 `property.getValue()` 与另一个模式进行比较,以进行更深入的搜索。 -## 实际应用场景 +## 实际应用 -| 场景 | 正则的帮助 | -|------|------------| -| **文档管理系统** | 自动按作者或部门对文件进行分类,无需为每个名称硬编码。 | -| **内容过滤** | 在批量处理前排除缺少必需元数据(如没有 `company` 标签)的文件。 | -| **数字资产管理** | 快速定位存储在多个文件夹中的特定摄影师拍摄的图片。 | +| 场景 | 正则表达式的帮助 | +|----------|-----------------| +| **文档管理系统** | 自动按作者或部门对文件进行分类,无需对每个名称进行硬编码。 | +| **内容过滤** | 在批量处理之前排除缺少必需元数据(例如,没有 `company` 标签)的文件。 | +| **数字资产管理** | 快速定位存储在多个文件夹中的特定摄影师拍摄的图像。 | -## 性能考虑 +## 性能考虑因素 在扫描成千上万的文件时: -1. **限制正则范围** – 避免使用过于宽泛的模式如 `.*`,因为它会让引擎检查每个字符。 -2. **复用已编译的 `Pattern` 对象** – 编译模式成本高,若频繁搜索请将其设为 static。 -3. **批量处理** – 将文档分组加载并搜索,以保持内存使用可预测。 -4. **调整 JVM 堆**,如果在大规模扫描时遇到 `OutOfMemoryError`。 +1. **限制正则表达式范围** – 避免使用像 `.*` 这样过于宽泛的模式,因为它会迫使引擎检查每个字符。 +2. **重用已编译的 `Pattern` 对象** – 编译模式成本高;如果重复调用搜索,请保持其为静态。 +3. **批量处理** – 分组加载和搜索文档,以保持内存使用可预测。 +4. 如果在大规模扫描期间遇到 `OutOfMemoryError`,请调整 JVM 堆大小。 -遵循这些技巧可保持搜索速度快且应用稳定。 +遵循这些技巧可保持搜索快速且应用程序稳定,即使在一次运行中处理 100 000+ 文档。 ## 常见问题与解决方案 -- **文件路径不正确** – 再次确认传递给 `new Metadata(...)` 的路径指向的是一个存在且可读的文件。 -- **正则语法错误** – 使用在线测试工具或在 `Pattern.compile` 外层加 try‑catch 以提前捕获问题。 -- **未找到匹配项** – 先在没有过滤条件的情况下打印 `metadata.getProperties()`,这可以显示可供定位的确切属性名称。 +- **文件路径不正确** – 再次确认传递给 `new Metadata(...)` 的路径指向一个存在且可读的文件。 +- **正则语法错误** – 使用在线测试工具或在 `Pattern.compile` 周围使用 try‑catch 以提前发现问题。 +- **未找到匹配项** – 首先在没有过滤器的情况下打印 `metadata.getProperties()`;这将显示您可以针对的确切属性名称。 ## 常见问答 -### 如何安装 GroupDocs.Metadata for Java? -请参考 **设置** 部分提供的 Maven 配置或直接下载说明。 +**Q: 如何安装 GroupDocs.Metadata for Java?** +A: 使用 **Maven 设置** 部分显示的 Maven 依赖,或从官方发布页面下载 JAR。 -### 可以在其他文件类型上使用正则模式吗? -可以,GroupDocs.Metadata 支持 PDF、Word、Excel、图片等多种格式。只需确保模式与特定文件类型的元数据结构相匹配。 +**Q: 我可以在其他文件类型上使用正则表达式模式吗?** +A: 可以,GroupDocs.Metadata 支持 PDF、Word、Excel、图像等多种格式,总计超过 30 种。 -### 如果我的正则模式没有匹配到任何属性怎么办? -检查是否有拼写错误、大小写问题或属性名中存在意外空格。简化模式并在已知属性上进行测试。 +**Q: 如果我的正则表达式模式未匹配到任何属性怎么办?** +A: 检查大小写敏感性,去除不必要的空白,并使用 `Pattern.matches` 对已知属性名进行模式测试。 -### 如何高效处理大数据集? -限制正则复杂度、复用已编译的模式,并按批次处理文档,详见 **性能考虑** 小节。 +**Q: 如何高效处理大型数据集?** +A: 保持正则表达式的具体性,重用已编译的 `Pattern` 对象,并按照 **性能考虑因素** 部分所述批量处理文件。 -### 在哪里可以找到更多元数据搜索示例? -浏览 [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) 获取更多用例和代码片段。 +**Q: 在哪里可以找到更多元数据搜索示例?** +A: 浏览 [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) 获取更多用例和代码片段。 ## 资源 - **文档:** [GroupDocs Metadata Java Docs](https://docs.groupdocs.com/metadata/java/) --- -**最后更新:** 2026-02-21 +**最后更新:** 2026-08-20 **测试环境:** GroupDocs.Metadata 24.12 for Java -**作者:** GroupDocs \ No newline at end of file +**作者:** GroupDocs + +## 相关教程 + +- [如何使用 GroupDocs.Metadata 在 Java 中搜索元数据:高效的基于标签的搜索](/metadata/java/advanced-features/groupdocs-metadata-java-search-tags/) +- [精通元数据管理:使用 GroupDocs.Metadata for Java 按标签搜索属性](/metadata/java/working-with-metadata/groupdocs-metadata-management-java/) +- [Java 元数据提取:使用 GroupDocs.Metadata 的自定义值接受器指南](/metadata/java/working-with-metadata/java-metadata-extraction-custom-value-acceptor-groupdocs/) \ No newline at end of file diff --git a/content/czech/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md b/content/czech/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md index da740bf22..254defbb5 100644 --- a/content/czech/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md +++ b/content/czech/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md @@ -1,46 +1,109 @@ --- -date: '2026-02-21' -description: Naučte se efektivně vyhledávat metadata v Javě pomocí regulárních výrazů - s využitím GroupDocs.Metadata. Zvyšte efektivitu správy dokumentů, zjednodušte vyhledávání - a zlepšete organizaci dat. +date: '2026-08-20' +description: Naučte se, jak vyhledávat metadata pomocí regex v Javě s GroupDocs.Metadata. + Rychle najděte autora, společnost nebo vlastní značky v PDF, Word, Excel, obrázcích + a dalších formátech. keywords: -- metadata searches in Java -- regex search metadata -- GroupDocs.Metadata for Java -title: Jak vyhledávat metadata v Javě pomocí regulárních výrazů s GroupDocs.Metadata +- how to search metadata +- pdf metadata search +- java metadata extraction +lastmod: '2026-08-20' +og_description: Jak vyhledávat metadata pomocí regex v Javě s GroupDocs.Metadata. + Tento průvodce vám představí rychlý, připravený pro produkci přístup k PDF, Word, + Excel, obrázkům a dalším formátům. +og_image_alt: 'Developer guide: searching document metadata with regex in Java using + GroupDocs.Metadata' +og_title: Jak vyhledávat metadata pomocí regex s GroupDocs.Metadata +schemas: +- author: GroupDocs + dateModified: '2026-08-20' + description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + headline: How to search metadata java using regex with GroupDocs.Metadata + type: TechArticle +- description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + name: How to search metadata java using regex with GroupDocs.Metadata + steps: + - name: Visit the GroupDocs website and request a temporary trial license. + text: Visit the GroupDocs website and request a temporary trial license. + - name: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + text: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + - name: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + text: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + - name: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + text: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + - name: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + text: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + - name: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + text: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + type: HowTo +- questions: + - answer: Use the Maven dependency shown in the **Maven setup** section or download + the JAR from the official releases page. + question: How do I install GroupDocs.Metadata for Java? + - answer: Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and many more + formats—over 30 in total. + question: Can I use regex patterns with other file types? + - answer: Verify case sensitivity, remove unnecessary whitespace, and test the pattern + against a known property name using `Pattern.matches`. + question: What if my regex pattern doesn’t match any properties? + - answer: Keep regexes specific, reuse compiled `Pattern` objects, and process files + in batches as described in the **Performance considerations** section. + question: How do I handle large datasets efficiently? + - answer: Explore the [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) + for additional use cases and code snippets. + question: Where can I find more examples of metadata searches? + type: FAQPage +tags: +- metadata search +- GroupDocs.Metadata +- Java regex +- document processing +title: Jak vyhledávat metadata v Javě pomocí regex s GroupDocs.Metadata type: docs url: /cs/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/ weight: 1 --- -# Jak vyhledávat metadata java pomocí Regex s GroupDocs.Metadata +# Jak vyhledávat metadata v Javě pomocí regex s GroupDocs.Metadata -Pokud se zajímáte **jak vyhledávat metadata java** rychle a přesně ve svých Java aplikacích, jste na správném místě. V tomto tutoriálu si projdeme použití GroupDocs.Metadata spolu s regulárními výrazy (regex), abychom našli konkrétní vlastnosti metadat — ať už potřebujete filtrovat podle autora, společnosti nebo jakéhokoli vlastního štítku. Na konci budete mít jasné, produkčně připravené řešení, které můžete vložit do libovolného zpracovatelského pipeline dokumentů. +Pokud se zajímáte o **jak vyhledávat metadata java** rychle a přesně ve svých Java aplikacích, jste na správném místě. V tomto tutoriálu vás provedeme používáním GroupDocs.Metadata spolu s regulárními výrazy (regex) k nalezení konkrétních vlastností metadat — ať už potřebujete filtrovat podle autora, společnosti nebo libovolného vlastního štítku. Na konci budete mít jasné, připravené řešení pro produkci, které můžete vložit do jakéhokoli zpracovatelského pipeline dokumentů. ## Rychlé odpovědi -- **Jaká je hlavní knihovna?** GroupDocs.Metadata pro Java -- **Která funkce vám pomůže najít metadata?** Vyhledávání založené na regexu pomocí `Specification` -- **Potřebuji licenci?** K dispozici je bezplatná zkušební verze; licence je vyžadována pro produkční použití -- **Mohu vyhledávat v jakémkoli typu dokumentu?** Ano, GroupDocs.Metadata podporuje PDF, Word, Excel, obrázky a další -- **Jaká verze Javy je požadována?** JDK 8 nebo vyšší +- **Jaká je hlavní knihovna?** GroupDocs.Metadata for Java +- **Která funkce vám pomáhá najít metadata?** Regex‑based search via `Specification` +- **Potřebuji licenci?** A free trial is available; a license is required for production use +- **Mohu vyhledávat v jakémkoli typu dokumentu?** Yes, GroupDocs.Metadata supports 30+ formats, including PDF, DOCX, XLSX, PPTX, JPEG, PNG, and TIFF +- **Jaká verze Javy je vyžadována?** JDK 8 or higher ## Co je vyhledávání metadata java a proč použít regex? -Metadata jsou skryté atributy vložené do souboru — autor, datum vytvoření, společnost atd. Vyhledávání těchto atributů pomocí prostého řetězcového porovnání funguje pro jednoduché případy, ale regex vám umožní definovat flexibilní vzory (např. „author*“ nebo „.*company.*“), takže můžete najít více souvisejících vlastností najednou. Tato flexibilita je nezbytná, když máte tisíce dokumentů a potřebujete rychlý, udržovatelný způsob dotazování jejich metadat. +Vyhledávání metadata java označuje programové vyhledávání skrytých atributů (autor, datum vytvoření, společnost, vlastní štítky) uvnitř souborů pomocí Javy. Regex vám umožňuje definovat flexibilní vzory — například `author.*` nebo `.*date.*` — takže jeden dotaz může najednou odpovídat mnoha souvisejícím vlastnostem. To je mnohem udržitelnější než ruční kódování desítek řetězcových porovnání, zejména při zpracování tisíců dokumentů v systému pro správu obsahu. ## Předpoklady -Než se pustíte do práce, ujistěte se, že máte následující: - -- **GroupDocs.Metadata pro Java** verze 24.12 nebo novější. -- Maven nainstalovaný pro správu závislostí. -- JDK 8 + a IDE jako IntelliJ IDEA nebo Eclipse. +- **GroupDocs.Metadata for Java** verze 24.12 nebo novější. +- Maven nainstalován pro správu závislostí. +- Java 8 + JDK a IDE jako IntelliJ IDEA nebo Eclipse. - Základní znalost Javy a regulárních výrazů. ## Nastavení GroupDocs.Metadata pro Java -### Maven Setup -Přidejte repozitář a závislost do svého `pom.xml`: +### Nastavení Maven +Add the repository and dependency to your `pom.xml`: ```xml @@ -61,15 +124,14 @@ Přidejte repozitář a závislost do svého `pom.xml`: ``` ### Přímé stažení -Pokud nechcete používat Maven, můžete si stáhnout nejnovější JAR přímo z [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/). - -### Kroky pro získání licence -1. Navštivte web GroupDocs a požádejte o dočasnou zkušební licenci. -2. Postupujte podle poskytnutých instrukcí a načtěte soubor licence ve svém Java projektu — tím odemknete plné API. +Pokud raději nepoužíváte Maven, můžete nejnovější JAR stáhnout přímo z [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/). -### Základní inicializace -Jakmile je knihovna na vašem classpath, můžete začít pracovat s metadaty: +### Kroky získání licence +1. Navštivte webové stránky GroupDocs a požádejte o dočasnou zkušební licenci. +2. Postupujte podle poskytnutých instrukcí k načtení licenčního souboru ve vašem Java projektu — tím odemknete plné API. +## Základní inicializace +`Metadata` je hlavní třída, která načítá metadata dokumentu pro inspekci a manipulaci. ```java Metadata metadata = new Metadata("path/to/your/document"); ``` @@ -78,21 +140,22 @@ Nyní jste připraveni použít regex vzory k vyhledávání metadat dokumentu. ## Jak vyhledávat metadata java pomocí regex vzoru -### Definování regex vzoru +Načtěte svůj dokument, zkompilujte regex vzor a použijte `Specification` k filtrování vlastností. Hlavní myšlenkou je: **vytvořit zkompilovaný `Pattern`, předat jej lambda výrazu `Specification` a nechat knihovnu vrátit všechny odpovídající objekty `MetadataProperty`.** Tento přístup běží v čase O(n) nad seznamem vlastností a zabraňuje načítání celého souboru do paměti. -Prvním krokem je rozhodnout, co chcete najít. Například pro nalezení vlastností pojmenovaných **author** nebo **company** můžete použít: +### Definování regex vzoru +`Pattern` je třída Java pro regulární výrazy používaná ke kompilaci řetězců regex pro porovnávání. ```java import java.util.regex.Pattern; Pattern pattern = Pattern.compile("author|company"); ``` -> **Tip:** Použijte příznak pro ne‑rozlišování velikosti písmen (`(?i)`), pokud se klíče metadat mohou lišit v kapitalizaci. +> **Tip:** Použijte příznaky pro nerozlišování velikosti písmen (`(?i)`), pokud se klíče metadat mohou lišit v kapitalizaci. -### Vyhledávání metadat pomocí Specification +### Vyhledávání metadat pomocí specifikace -GroupDocs.Metadata poskytuje třídu `Specification`, která přijímá lambda výraz. Lambda získá každý `MetadataProperty` a umožní vám aplikovat váš regex: +`Specification` je tvůrce filtrů v GroupDocs.Metadata, který vám umožňuje definovat vlastní predikáty pro vlastnosti metadat. Vyhodnocuje každou `MetadataProperty` vůči poskytnutému lambda výrazu. ```java import com.groupdocs.metadata.Metadata; @@ -119,69 +182,75 @@ try (Metadata metadata = new Metadata("path/to/your/document")) { **Vysvětlení klíčových prvků** -| Prvek | Účel | +| Element | Purpose | |---------|---------| -| `Specification` | Zabalí vaši vlastní lambda funkci, aby knihovna věděla, jak filtrovat vlastnosti. | -| `pattern.matcher(property.getName()).find()` | Aplikuje regex na název každé vlastnosti. | -| `findProperties(spec)` | Vrací pouze‑čtení seznam všech vlastností, které splňují specifikaci. | +| `Specification` | Zabalí váš vlastní lambda výraz, aby knihovna věděla, jak filtrovat vlastnosti. | +| `pattern.matcher(property.getName()).find()` | Aplikuje regex na každý název vlastnosti. | +| `findProperties(spec)` | Vrací pouze pro čtení seznam všech vlastností, které splňují specifikaci. | -Můžete tento přístup rozšířit řetězením více specifikací (např. filtrovat podle názvu *a* hodnoty) nebo vytvořením složitějších regex vzorů. +Tento přístup můžete rozšířit řetězením více specifikací (např. filtrovat podle názvu *a* hodnoty) nebo vytvořením složitějších regex vzorů. ## Přizpůsobení a rozšíření vyhledávání - **Více termínů:** `Pattern.compile("author|company|title")` -- **Wildcard vyhledávání:** `Pattern.compile(".*date.*")` najde jakoukoli vlastnost obsahující „date“. -- **Filtrování podle hodnoty:** V lambda výrazu můžete také porovnat `property.getValue()` s dalším vzorem pro hlubší vyhledávání. +- **Vyhledávání s divokou kartou:** `Pattern.compile(".*date.*")` najde jakoukoli vlastnost obsahující „date“. +- **Filtrování podle hodnoty:** V lambda výrazu také porovnejte `property.getValue()` s dalším vzorem pro podrobnější vyhledávání. ## Praktické aplikace -| Scénář | Jak pomáhá regex | +| Scénář | Jak regex pomáhá | |----------|-----------------| -| **Systémy pro správu dokumentů** | Automaticky kategorizovat soubory podle autora nebo oddělení bez pevného kódování každého jména. | -| **Filtrování obsahu** | Vyloučit soubory postrádající požadovaná metadata (např. žádný `company` štítek) před hromadným zpracováním. | -| **Digitální správa aktiv** | Rychle najít obrázky vytvořené konkrétním fotografem uložené ve více složkách. | +| **Document management systems** | Automaticky kategorizovat soubory podle autora nebo oddělení bez ručního kódování každého jména. | +| **Content filtering** | Vyloučit soubory, kterým chybí požadovaná metadata (např. žádný štítek `company`) před hromadným zpracováním. | +| **Digital asset management** | Rychle najít obrázky vytvořené konkrétním fotografem uložené v mnoha složkách. | ## Úvahy o výkonu -Při skenování tisíců souborů: +When scanning thousands of files: -1. **Omezte rozsah regexu** — vyhněte se příliš širokým vzorům jako `.*`, které nutí engine prozkoumat každý znak. -2. **Znovu používejte kompilované objekty `Pattern`** — kompilace vzoru je nákladná; uchovávejte jej jako statický, pokud voláte vyhledávání opakovaně. -3. **Dávkové zpracování** — načítejte a prohledávejte dokumenty po skupinách, aby byl paměťový profil předvídatelný. -4. **Upravte heap JVM**, pokud během masivních skenů narazíte na `OutOfMemoryError`. +1. **Omezte rozsah regex** – vyhněte se příliš širokým vzorům jako `.*`, které nutí engine prozkoumat každý znak. +2. **Znovu používejte zkompilované objekty `Pattern`** – kompilace vzoru je nákladná; udržujte jej statickým, pokud voláte vyhledávání opakovaně. +3. **Dávkové zpracování** – načítejte a prohledávejte dokumenty po skupinách, aby byl využití paměti předvídatelný. +4. **Upravte haldu JVM**, pokud během masivních skenů narazíte na `OutOfMemoryError`. -Dodržení těchto tipů udrží vaše vyhledávání rychlé a aplikaci stabilní. +Dodržování těchto tipů udrží vaše vyhledávání rychlá a aplikaci stabilní, i při zpracování více než 100 000 dokumentů v jednom běhu. ## Časté problémy a řešení -- **Nesprávná cesta k souboru** — Dvakrát zkontrolujte, že cesta předaná do `new Metadata(...)` ukazuje na existující, čitelný soubor. -- **Chyby v syntaxi regexu** — Použijte online tester nebo obalte `Pattern.compile` do try‑catch, abyste problémy odhalili brzy. -- **Nebyly nalezeny žádné shody** — Nejprve vytiskněte `metadata.getProperties()` bez filtru; zobrazí vám přesné názvy vlastností, které můžete cílit. +- **Nesprávná cesta k souboru** – Ověřte, že cesta předaná do `new Metadata(...)` ukazuje na existující, čitelný soubor. +- **Chyby syntaxe regex** – Použijte online tester nebo obalte `Pattern.compile` do try‑catch, abyste problémy odhalili brzy. +- **Nebyla nalezena žádná shoda** – Nejprve vytiskněte `metadata.getProperties()` bez filtru; to odhalí přesné názvy vlastností, na které se můžete zaměřit. ## Často kladené otázky -### Jak nainstaluji GroupDocs.Metadata pro Java? -Postupujte podle nastavení Maven nebo pokynů pro přímé stažení uvedených v sekci **Nastavení**. +**Q: Jak nainstaluji GroupDocs.Metadata pro Java?** +A: Použijte Maven závislost uvedenou v sekci **Maven setup** nebo stáhněte JAR z oficiální stránky vydání. -### Mohu používat regex vzory s jinými typy souborů? -Ano, GroupDocs.Metadata podporuje PDF, Word, Excel, obrázky a mnoho dalších formátů. Jen se ujistěte, že vzor odpovídá schématu metadat konkrétního typu souboru. +**Q: Mohu používat regex vzory s jinými typy souborů?** +A: Ano, GroupDocs.Metadata podporuje PDF, Word, Excel, obrázky a mnoho dalších formátů — celkem více než 30. -### Co když můj regex vzor neodpovídá žádným vlastnostem? -Zkontrolujte překlepy, rozlišování velikosti písmen nebo neočekávané mezery v názvech vlastností. Zjednodušte vzor a otestujte ho na známé vlastnosti. +**Q: Co když můj regex vzor neodpovídá žádným vlastnostem?** +A: Ověřte citlivost na velikost písmen, odstraňte zbytečné mezery a otestujte vzor proti známému názvu vlastnosti pomocí `Pattern.matches`. -### Jak efektivně zpracovat velké datové sady? -Omezte složitost regexu, znovu používejte kompilované vzory a zpracovávejte dokumenty po dávkách, jak je popsáno v sekci **Úvahy o výkonu**. +**Q: Jak efektivně zpracovat velké datové sady?** +A: Udržujte regexy specifické, znovu používejte zkompilované objekty `Pattern` a zpracovávejte soubory po dávkách, jak je popsáno v sekci **Performance considerations**. -### Kde najdu další příklady vyhledávání metadat? -Prozkoumejte [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) pro další případy použití a ukázky kódu. +**Q: Kde najdu další příklady vyhledávání metadat?** +A: Prozkoumejte [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) pro další příklady použití a úryvky kódu. ## Zdroje - **Dokumentace:** [GroupDocs Metadata Java Docs](https://docs.groupdocs.com/metadata/java/) --- -**Poslední aktualizace:** 2026-02-21 +**Poslední aktualizace:** 2026-08-20 **Testováno s:** GroupDocs.Metadata 24.12 pro Java **Autor:** GroupDocs ---- \ No newline at end of file +--- + +## Související tutoriály + +- [Jak vyhledávat metadata s GroupDocs.Metadata v Javě: Efektivní vyhledávání podle štítků](/metadata/java/advanced-features/groupdocs-metadata-java-search-tags/) +- [Mistrovství v řízení metadat: Vyhledávání vlastností podle štítku pomocí GroupDocs.Metadata pro Java](/metadata/java/working-with-metadata/groupdocs-metadata-management-java/) +- [Extrahování metadat v Javě: Průvodce vlastním akceptorem hodnot s GroupDocs.Metadata](/metadata/java/working-with-metadata/java-metadata-extraction-custom-value-acceptor-groupdocs/) \ No newline at end of file diff --git a/content/dutch/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md b/content/dutch/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md index 2bd4aa805..b6436ffec 100644 --- a/content/dutch/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md +++ b/content/dutch/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md @@ -1,46 +1,111 @@ --- -date: '2026-02-21' -description: Leer hoe je metadata in Java efficiënt kunt doorzoeken met regex met - behulp van GroupDocs.Metadata. Verhoog het documentbeheer, stroomlijn zoekopdrachten - en verbeter de gegevensorganisatie. +date: '2026-08-20' +description: Leer hoe je metadata kunt zoeken met regex in Java met GroupDocs.Metadata. + Zoek snel naar auteur, bedrijf of aangepaste tags in PDF's, Word, Excel, afbeeldingen + en meer. keywords: -- metadata searches in Java -- regex search metadata -- GroupDocs.Metadata for Java -title: Hoe metadata in Java zoeken met regex en GroupDocs.Metadata +- how to search metadata +- pdf metadata search +- java metadata extraction +lastmod: '2026-08-20' +og_description: Hoe metadata zoeken met regex in Java met GroupDocs.Metadata. Deze + gids toont een snelle, productieklare aanpak voor PDF's, Word, Excel, afbeeldingen + en andere formaten. +og_image_alt: 'Developer guide: searching document metadata with regex in Java using + GroupDocs.Metadata' +og_title: Hoe metadata zoeken met regex met GroupDocs.Metadata +schemas: +- author: GroupDocs + dateModified: '2026-08-20' + description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + headline: How to search metadata java using regex with GroupDocs.Metadata + type: TechArticle +- description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + name: How to search metadata java using regex with GroupDocs.Metadata + steps: + - name: Visit the GroupDocs website and request a temporary trial license. + text: Visit the GroupDocs website and request a temporary trial license. + - name: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + text: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + - name: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + text: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + - name: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + text: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + - name: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + text: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + - name: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + text: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + type: HowTo +- questions: + - answer: Use the Maven dependency shown in the **Maven setup** section or download + the JAR from the official releases page. + question: How do I install GroupDocs.Metadata for Java? + - answer: Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and many more + formats—over 30 in total. + question: Can I use regex patterns with other file types? + - answer: Verify case sensitivity, remove unnecessary whitespace, and test the pattern + against a known property name using `Pattern.matches`. + question: What if my regex pattern doesn’t match any properties? + - answer: Keep regexes specific, reuse compiled `Pattern` objects, and process files + in batches as described in the **Performance considerations** section. + question: How do I handle large datasets efficiently? + - answer: Explore the [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) + for additional use cases and code snippets. + question: Where can I find more examples of metadata searches? + type: FAQPage +tags: +- metadata search +- GroupDocs.Metadata +- Java regex +- document processing +title: Hoe metadata in Java zoeken met regex met GroupDocs.Metadata type: docs url: /nl/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/ weight: 1 --- -# Hoe metadata java te zoeken met Regex en GroupDocs.Metadata +# Hoe metadata in Java zoeken met regex met GroupDocs.Metadata -Als je je afvraagt **hoe metadata java te zoeken** snel en nauwkeurig in je Java‑applicaties, ben je op de juiste plek. In deze tutorial lopen we door het gebruik van GroupDocs.Metadata samen met reguliere expressies (regex) om specifieke metadata‑eigenschappen te vinden—of je nu wilt filteren op auteur, bedrijf of een aangepaste tag. Aan het einde heb je een duidelijke, productie‑klare oplossing die je in elke document‑verwerkingspipeline kunt gebruiken. +Als je je afvraagt **hoe je metadata in Java** snel en nauwkeurig kunt doorzoeken in je Java‑toepassingen, ben je op de juiste plek. In deze tutorial lopen we door het gebruik van GroupDocs.Metadata samen met reguliere expressies (regex) om specifieke metadata‑eigenschappen te vinden — of je nu wilt filteren op auteur, bedrijf of een aangepaste tag. Aan het einde heb je een duidelijke, productie‑klare oplossing die je in elke document‑verwerkingspipeline kunt opnemen. ## Snelle antwoorden - **Wat is de primaire bibliotheek?** GroupDocs.Metadata for Java -- **Welke functie helpt je metadata te vinden?** Regex‑gebaseerd zoeken via `Specification` +- **Welke functie helpt je metadata te vinden?** Regex‑based search via `Specification` - **Heb ik een licentie nodig?** Een gratis proefversie is beschikbaar; een licentie is vereist voor productiegebruik -- **Kan ik elk documenttype doorzoeken?** Ja, GroupDocs.Metadata ondersteunt PDF’s, Word, Excel, afbeeldingen en meer +- **Kan ik elk documenttype doorzoeken?** Ja, GroupDocs.Metadata ondersteunt meer dan 30 formaten, inclusief PDF, DOCX, XLSX, PPTX, JPEG, PNG en TIFF - **Welke Java‑versie is vereist?** JDK 8 of hoger -## Wat is search metadata java en waarom regex gebruiken? +## Wat is metadata zoeken in Java en waarom regex gebruiken? -Metadata zijn de verborgen attributen die in een bestand zijn ingebed—auteur, aanmaakdatum, bedrijf, enzovoort. Deze attributen zoeken met eenvoudige tekenreeks‑matching werkt voor simpele gevallen, maar regex laat je flexibele patronen definiëren (bijv. “author*” of “.*company.*”) zodat je meerdere gerelateerde eigenschappen in één keer kunt vinden. Deze flexibiliteit is essentieel wanneer je duizenden documenten hebt en een snelle, onderhoudbare manier nodig hebt om hun metadata te doorzoeken. +Metadata zoeken in Java verwijst naar het programmatisch lokaliseren van verborgen attributen (auteur, aanmaakdatum, bedrijf, aangepaste tags) binnen bestanden met Java. Regex laat je flexibele patronen definiëren — zoals `author.*` of `.*date.*` — zodat één query veel gerelateerde eigenschappen tegelijk kan matchen. Dit is veel onderhoudsvriendelijker dan tientallen string‑vergelijkingen hard te coderen, vooral wanneer je duizenden documenten verwerkt in een content‑managementsysteem. ## Vereisten -Voordat je begint, zorg dat je het volgende hebt: +Zorg ervoor dat je het volgende hebt: -- **GroupDocs.Metadata for Java** versie 24.12 of nieuwer. -- Maven geïnstalleerd voor afhankelijkheidsbeheer. +- **GroupDocs.Metadata voor Java** versie 24.12 of nieuwer. +- Maven geïnstalleerd voor dependency‑beheer. - Een Java 8 + JDK en een IDE zoals IntelliJ IDEA of Eclipse. - Basiskennis van Java en reguliere expressies. ## GroupDocs.Metadata voor Java instellen ### Maven‑configuratie -Voeg de repository en afhankelijkheid toe aan je `pom.xml`: +Voeg de repository en dependency toe aan je `pom.xml`: ```xml @@ -61,38 +126,38 @@ Voeg de repository en afhankelijkheid toe aan je `pom.xml`: ``` ### Directe download -Als je liever geen Maven gebruikt, kun je de nieuwste JAR direct downloaden van [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/). +Als je liever geen Maven gebruikt, kun je de nieuwste JAR direct downloaden van [GroupDocs.Metadata voor Java releases](https://releases.groupdocs.com/metadata/java/). -### Stappen voor licentie‑acquisitie +### Stappen voor het verkrijgen van een licentie 1. Bezoek de GroupDocs‑website en vraag een tijdelijke proeflicentie aan. -2. Volg de meegeleverde instructies om het licentiebestand in je Java‑project te laden—dit ontgrendelt de volledige API. - -### Basisinitialisatie -Zodra de bibliotheek op je classpath staat, kun je beginnen met het werken met metadata: +2. Volg de meegeleverde instructies om het licentiebestand in je Java‑project te laden — dit ontgrendelt de volledige API. +## Basisinitialisatie +`Metadata` is de primaire klasse die de metadata van een document laadt voor inspectie en manipulatie. ```java Metadata metadata = new Metadata("path/to/your/document"); ``` Nu ben je klaar om regex‑patronen toe te passen om documentmetadata te doorzoeken. -## Hoe metadata java te zoeken met een regex‑patroon +## Hoe metadata in Java zoeken met een regex‑patroon -### Het definiëren van het regex‑patroon +Laad je document, compileer een regex‑patroon en gebruik een `Specification` om eigenschappen te filteren. Het kernidee is: **maak een gecompileerde `Pattern`, geef die door aan een `Specification`‑lambda, en laat de bibliotheek alle overeenkomende `MetadataProperty`‑objecten retourneren.** Deze aanpak werkt in O(n) tijd over de eigenschappenlijst en vermijdt het laden van het volledige bestand in het geheugen. -De eerste stap is bepalen wat je wilt matchen. Bijvoorbeeld, om eigenschappen met de naam **author** of **company** te vinden, kun je gebruiken: +### Het definiëren van het regex‑patroon +`Pattern` is Java’s regular‑expression‑klasse die wordt gebruikt om regex‑strings te compileren voor matching. ```java import java.util.regex.Pattern; Pattern pattern = Pattern.compile("author|company"); ``` -> **Pro tip:** Gebruik case‑insensitieve vlaggen (`(?i)`) als je metadata‑sleutels in hoofdlettergebruik kunnen variëren. +> **Pro tip:** Gebruik case‑insensitive vlaggen (`(?i)`) als je metadata‑sleutels kunnen variëren in hoofdlettergebruik. -### Metadata zoeken met een Specification +### Metadata zoeken met een specificatie -GroupDocs.Metadata biedt een `Specification`‑klasse die een lambda‑expressie accepteert. De lambda ontvangt elke `MetadataProperty` en laat je je regex toepassen: +`Specification` is een filter‑builder in GroupDocs.Metadata die je in staat stelt aangepaste predicaten voor metadata‑eigenschappen te definiëren. Het evalueert elke `MetadataProperty` tegen de meegegeven lambda. ```java import com.groupdocs.metadata.Metadata; @@ -121,65 +186,73 @@ try (Metadata metadata = new Metadata("path/to/your/document")) { | Element | Doel | |---------|------| -| `Specification` | Verpakt je aangepaste lambda zodat de bibliotheek weet hoe eigenschappen te filteren. | +| `Specification` | Verpakt je aangepaste lambda zodat de bibliotheek weet hoe eigenschappen gefilterd moeten worden. | | `pattern.matcher(property.getName()).find()` | Past de regex toe op elke eigenschapsnaam. | | `findProperties(spec)` | Retourneert een alleen‑lezen lijst van alle eigenschappen die aan de specificatie voldoen. | -Je kunt deze aanpak uitbreiden door meerdere specifications te combineren (bijv. filteren op naam *en* op waarde) of door complexere regex‑patronen te bouwen. +Je kunt deze aanpak uitbreiden door meerdere specificaties te combineren (bijv. filteren op naam *en* op waarde) of door complexere regex‑patronen te bouwen. ## Aanpassen en uitbreiden van de zoekopdracht - **Meerdere termen:** `Pattern.compile("author|company|title")` - **Wildcard‑zoekopdracht:** `Pattern.compile(".*date.*")` vindt elke eigenschap die “date” bevat. -- **Value‑based filtering:** Binnen de lambda kun je ook `property.getValue()` vergelijken met een ander patroon voor diepere zoekopdrachten. +- **Waarde‑gebaseerde filtering:** Binnen de lambda kun je ook `property.getValue()` vergelijken met een ander patroon voor diepere zoekopdrachten. ## Praktische toepassingen | Scenario | Hoe regex helpt | |----------|-----------------| -| **Document Management Systems** | Automatisch bestanden categoriseren op auteur of afdeling zonder elke naam hard te coderen. | -| **Content Filtering** | Bestanden zonder verplichte metadata (bijv. geen `company`‑tag) uitsluiten vóór bulkverwerking. | -| **Digital Asset Management** | Snel afbeeldingen vinden die door een specifieke fotograaf zijn gemaakt, verspreid over vele mappen. | +| **Documentbeheersystemen** | Automatiseer het categoriseren van bestanden op auteur of afdeling zonder elke naam hard te coderen. | +| **Content‑filtering** | Sluit bestanden uit die verplichte metadata missen (bijv. geen `company`‑tag) vóór bulkverwerking. | +| **Digital Asset Management** | Vind snel afbeeldingen die door een specifieke fotograaf zijn gemaakt en over vele mappen zijn verspreid. | ## Prestatie‑overwegingen -Wanneer je duizenden bestanden scant: +Bij het scannen van duizenden bestanden: 1. **Beperk de regex‑scope** – vermijd te brede patronen zoals `.*` die de engine dwingen elk teken te onderzoeken. -2. **Hergebruik gecompileerde `Pattern`‑objecten** – het compileren van een patroon is duur; houd het statisch als je de zoekopdracht herhaaldelijk aanroept. +2. **Herbruik gecompileerde `Pattern`‑objecten** – een patroon compileren is duur; houd het statisch als je de zoekopdracht herhaaldelijk aanroept. 3. **Batch‑verwerking** – laad en doorzoek documenten in groepen om het geheugenverbruik voorspelbaar te houden. -4. **Pas de JVM‑heap aan** als je een `OutOfMemoryError` tegenkomt tijdens massale scans. +4. **Pas de JVM‑heap aan** als je een `OutOfMemoryError` tegenkomt tijdens massale scans. -Door deze tips te volgen blijven je zoekopdrachten snel en blijft je applicatie stabiel. +Het volgen van deze tips houdt je zoekopdrachten snel en je applicatie stabiel, zelfs bij het verwerken van meer dan 100 000 documenten in één run. ## Veelvoorkomende problemen & oplossingen -- **Onjuist bestandspad** – Controleer dubbel of het pad dat je aan `new Metadata(...)` doorgeeft naar een bestaand, leesbaar bestand wijst. -- **Regex‑syntaxisfouten** – Gebruik een online tester of wikkel `Pattern.compile` in een try‑catch om problemen vroegtijdig te signaleren. -- **Geen resultaten gevonden** – Print `metadata.getProperties()` zonder filter eerst; dit onthult de exacte eigenschapsnamen die je kunt targeten. +- **Onjuist bestandspad** – Controleer dubbel of het pad dat je doorgeeft aan `new Metadata(...)` naar een bestaand, leesbaar bestand wijst. +- **Regex‑syntaxisfouten** – Gebruik een online tester of plaats `Pattern.compile` in een try‑catch om problemen vroegtijdig te signaleren. +- **Geen overeenkomsten gevonden** – Print `metadata.getProperties()` zonder filter eerst; dit onthult de exacte eigenschapsnamen die je kunt targeten. ## Veelgestelde vragen -### Hoe installeer ik GroupDocs.Metadata voor Java? -Volg de Maven‑configuratie of de directe download‑instructies die in de **Instellen**‑sectie zijn gegeven. +**Q: Hoe installeer ik GroupDocs.Metadata voor Java?** +A: Gebruik de Maven‑dependency die wordt getoond in de **Maven‑configuratie**‑sectie of download de JAR van de officiële releases‑pagina. -### Kan ik regex‑patronen gebruiken met andere bestandstypen? -Ja, GroupDocs.Metadata ondersteunt PDF’s, Word, Excel, afbeeldingen en nog veel meer formaten. Zorg er alleen voor dat het patroon overeenkomt met het metadata‑schema van het specifieke bestandstype. +**Q: Kan ik regex‑patronen met andere bestandstypen gebruiken?** +A: Ja, GroupDocs.Metadata ondersteunt PDF’s, Word, Excel, afbeeldingen en nog veel meer formaten — meer dan 30 in totaal. -### Wat als mijn regex‑patroon geen eigenschappen vindt? -Controleer op typefouten, hoofdlettergevoeligheid of onverwachte spaties in eigenschapsnamen. Vereenvoudig het patroon en test het tegen een bekende eigenschap. +**Q: Wat als mijn regex‑patroon geen enkele eigenschap matcht?** +A: Controleer hoofdlettergevoeligheid, verwijder onnodige witruimtes en test het patroon tegen een bekende eigenschapsnaam met `Pattern.matches`. -### Hoe ga ik efficiënt om met grote datasets? -Beperk de complexiteit van regex, hergebruik gecompileerde patronen en verwerk documenten in batches zoals beschreven in de **Prestatie‑overwegingen**. +**Q: Hoe verwerk ik grote datasets efficiënt?** +A: Houd regexen specifiek, hergebruik gecompileerde `Pattern`‑objecten en verwerk bestanden in batches zoals beschreven in de **Prestatie‑overwegingen**‑sectie. -### Waar kan ik meer voorbeelden van metadata‑zoekopdrachten vinden? -Bekijk de [GroupDocs.Metadata Documentatie](https://docs.groupdocs.com/metadata/java/) voor extra use‑cases en code‑fragmenten. +**Q: Waar vind ik meer voorbeelden van metadata‑zoekopdrachten?** +A: Bekijk de [GroupDocs.Metadata Documentatie](https://docs.groupdocs.com/metadata/java/) voor extra use‑cases en code‑fragmenten. ## Bronnen - **Documentatie:** [GroupDocs Metadata Java Docs](https://docs.groupdocs.com/metadata/java/) --- -**Last Updated:** 2026-02-21 +**Last Updated:** 2026-08-20 **Tested With:** GroupDocs.Metadata 24.12 for Java -**Author:** GroupDocs \ No newline at end of file +**Author:** GroupDocs + +--- + +## Gerelateerde tutorials + +- [Hoe metadata zoeken met GroupDocs.Metadata in Java: efficiënte tag‑gebaseerde zoekopdrachten](/metadata/java/advanced-features/groupdocs-metadata-java-search-tags/) +- [Meesterschap in metadata‑beheer: eigenschappen zoeken op tag met GroupDocs.Metadata voor Java](/metadata/java/working-with-metadata/groupdocs-metadata-management-java/) +- [Java metadata‑extractie: gids voor aangepaste value acceptor met GroupDocs.Metadata](/metadata/java/working-with-metadata/java-metadata-extraction-custom-value-acceptor-groupdocs/) \ No newline at end of file diff --git a/content/english/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md b/content/english/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md index c9ee614bb..ee7789b79 100644 --- a/content/english/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md +++ b/content/english/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/_index.md @@ -1,30 +1,99 @@ --- -title: "How to search metadata java using Regex with GroupDocs.Metadata" -description: "Learn how to search metadata java efficiently with regex using GroupDocs.Metadata. Boost document management, streamline searches, and improve data organization." -date: "2026-02-21" -weight: 1 -url: "/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/" +date: '2026-08-20' +description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. +images: +- /java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/og-image.png keywords: -- metadata searches in Java -- regex search metadata -- GroupDocs.Metadata for Java +- how to search metadata +- pdf metadata search +- java metadata extraction +lastmod: '2026-08-20' +og_description: How to search metadata using regex in Java with GroupDocs.Metadata. + This guide shows you a fast, production‑ready approach for PDFs, Word, Excel, images + and other formats. +og_image_alt: 'Developer guide: searching document metadata with regex in Java using + GroupDocs.Metadata' +og_title: How to search metadata with regex using GroupDocs.Metadata +schemas: +- author: GroupDocs + dateModified: '2026-08-20' + description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + headline: How to search metadata java using regex with GroupDocs.Metadata + type: TechArticle +- description: Learn how to search metadata using regex in Java with GroupDocs.Metadata. + Quickly locate author, company, or custom tags across PDFs, Word, Excel, images + and more. + name: How to search metadata java using regex with GroupDocs.Metadata + steps: + - name: Visit the GroupDocs website and request a temporary trial license. + text: Visit the GroupDocs website and request a temporary trial license. + - name: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + text: Follow the provided instructions to load the license file in your Java project—this + unlocks the full API. + - name: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + text: '**Limit the regex scope** – avoid overly broad patterns like `.*` which + force the engine to examine every character.' + - name: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + text: '**Reuse compiled `Pattern` objects** – compiling a pattern is expensive; + keep it static if you call the search repeatedly.' + - name: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + text: '**Batch processing** – load and search documents in groups to keep memory + usage predictable.' + - name: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + text: '**Adjust JVM heap** if you encounter `OutOfMemoryError` during massive + scans.' + type: HowTo +- questions: + - answer: Use the Maven dependency shown in the **Maven setup** section or download + the JAR from the official releases page. + question: How do I install GroupDocs.Metadata for Java? + - answer: Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and many more + formats—over 30 in total. + question: Can I use regex patterns with other file types? + - answer: Verify case sensitivity, remove unnecessary whitespace, and test the pattern + against a known property name using `Pattern.matches`. + question: What if my regex pattern doesn’t match any properties? + - answer: Keep regexes specific, reuse compiled `Pattern` objects, and process files + in batches as described in the **Performance considerations** section. + question: How do I handle large datasets efficiently? + - answer: Explore the [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) + for additional use cases and code snippets. + question: Where can I find more examples of metadata searches? + type: FAQPage +tags: +- metadata search +- GroupDocs.Metadata +- Java regex +- document processing +title: How to search metadata java using regex with GroupDocs.Metadata type: docs +url: /java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/ +weight: 1 --- -# How to search metadata java using Regex with GroupDocs.Metadata +# How to search metadata java using regex with GroupDocs.Metadata If you’re wondering **how to search metadata java** quickly and accurately in your Java applications, you’ve come to the right place. In this tutorial we’ll walk through using GroupDocs.Metadata together with regular expressions (regex) to locate specific metadata properties—whether you need to filter by author, company, or any custom tag. By the end, you’ll have a clear, production‑ready solution that you can drop into any document‑processing pipeline. -## Quick Answers +## Quick answers - **What is the primary library?** GroupDocs.Metadata for Java - **Which feature helps you find metadata?** Regex‑based search via `Specification` - **Do I need a license?** A free trial is available; a license is required for production use -- **Can I search any document type?** Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and more +- **Can I search any document type?** Yes, GroupDocs.Metadata supports 30+ formats, including PDF, DOCX, XLSX, PPTX, JPEG, PNG, and TIFF - **What Java version is required?** JDK 8 or higher ## What is search metadata java and why use regex? -Metadata are the hidden attributes embedded in a file—author, creation date, company, etc. Searching these attributes with plain string matching works for simple cases, but regex lets you define flexible patterns (e.g., “author*” or “.*company.*”) so you can locate multiple related properties in a single pass. This flexibility is essential when you have thousands of documents and need a fast, maintainable way to query their metadata. +Search metadata java refers to programmatically locating hidden attributes (author, creation date, company, custom tags) inside files using Java. Regex lets you define flexible patterns—such as `author.*` or `.*date.*`—so a single query can match many related properties at once. This is far more maintainable than hard‑coding dozens of string comparisons, especially when you’re processing thousands of documents in a content‑management system. ## Prerequisites @@ -35,9 +104,9 @@ Before diving in, make sure you have the following: - A Java 8 + JDK and an IDE such as IntelliJ IDEA or Eclipse. - Basic familiarity with Java and regular expressions. -## Setting Up GroupDocs.Metadata for Java +## Setting up GroupDocs.Metadata for Java -### Maven Setup +### Maven setup Add the repository and dependency to your `pom.xml`: ```xml @@ -58,16 +127,15 @@ Add the repository and dependency to your `pom.xml`: ``` -### Direct Download +### Direct download If you prefer not to use Maven, you can download the latest JAR directly from [GroupDocs.Metadata for Java releases](https://releases.groupdocs.com/metadata/java/). -### License Acquisition Steps +### License acquisition steps 1. Visit the GroupDocs website and request a temporary trial license. 2. Follow the provided instructions to load the license file in your Java project—this unlocks the full API. -### Basic Initialization -Once the library is on your classpath, you can start working with metadata: - +## Basic initialization +`Metadata` is the primary class that loads a document’s metadata for inspection and manipulation. ```java Metadata metadata = new Metadata("path/to/your/document"); ``` @@ -76,10 +144,11 @@ Now you’re ready to apply regex patterns to search document metadata. ## How to search metadata java with a regex pattern -### Defining the Regex Pattern +Load your document, compile a regex pattern, and use a `Specification` to filter properties. The core idea is: **create a compiled `Pattern`, pass it to a `Specification` lambda, and let the library return all matching `MetadataProperty` objects.** This approach runs in O(n) time over the property list and avoids loading the entire file into memory. -The first step is to decide what you want to match. For example, to find properties named **author** or **company**, you can use: +### Defining the regex pattern +`Pattern` is Java’s regular‑expression class used to compile regex strings for matching. ```java import java.util.regex.Pattern; @@ -88,9 +157,9 @@ Pattern pattern = Pattern.compile("author|company"); > **Pro tip:** Use case‑insensitive flags (`(?i)`) if your metadata keys may vary in capitalization. -### Searching Metadata with a Specification +### Searching metadata with a specification -GroupDocs.Metadata provides a `Specification` class that accepts a lambda expression. The lambda receives each `MetadataProperty` and lets you apply your regex: +`Specification` is a filter builder in GroupDocs.Metadata that lets you define custom predicates for metadata properties. It evaluates each `MetadataProperty` against the supplied lambda. ```java import com.groupdocs.metadata.Metadata; @@ -125,21 +194,21 @@ try (Metadata metadata = new Metadata("path/to/your/document")) { You can extend this approach by chaining multiple specifications (e.g., filter by name *and* by value) or by building more complex regex patterns. -## Customizing and Extending the Search +## Customizing and extending the search - **Multiple terms:** `Pattern.compile("author|company|title")` - **Wildcard search:** `Pattern.compile(".*date.*")` finds any property containing “date”. - **Value‑based filtering:** Inside the lambda, also compare `property.getValue()` to another pattern for deeper searches. -## Practical Applications +## Practical applications | Scenario | How regex helps | |----------|-----------------| -| **Document Management Systems** | Auto‑categorize files by author or department without hard‑coding each name. | -| **Content Filtering** | Exclude files missing required metadata (e.g., no `company` tag) before bulk processing. | -| **Digital Asset Management** | Quickly locate images created by a specific photographer stored across many folders. | +| **Document management systems** | Auto‑categorize files by author or department without hard‑coding each name. | +| **Content filtering** | Exclude files missing required metadata (e.g., no `company` tag) before bulk processing. | +| **Digital asset management** | Quickly locate images created by a specific photographer stored across many folders. | -## Performance Considerations +## Performance considerations When scanning thousands of files: @@ -148,38 +217,44 @@ When scanning thousands of files: 3. **Batch processing** – load and search documents in groups to keep memory usage predictable. 4. **Adjust JVM heap** if you encounter `OutOfMemoryError` during massive scans. -Following these tips keeps your searches fast and your application stable. +Following these tips keeps your searches fast and your application stable, even when processing 100 000+ documents in a single run. -## Common Issues & Solutions +## Common issues & solutions - **Incorrect file path** – Double‑check that the path you pass to `new Metadata(...)` points to an existing, readable file. - **Regex syntax errors** – Use an online tester or wrap `Pattern.compile` in a try‑catch to surface problems early. - **No matches found** – Print `metadata.getProperties()` without a filter first; this reveals the exact property names you can target. -## Frequently Asked Questions +## Frequently asked questions -### How do I install GroupDocs.Metadata for Java? -Follow the Maven setup or direct download instructions provided in the **Setting Up** section. +**Q: How do I install GroupDocs.Metadata for Java?** +A: Use the Maven dependency shown in the **Maven setup** section or download the JAR from the official releases page. -### Can I use regex patterns with other file types? -Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and many more formats. Just ensure the pattern aligns with the metadata schema of the specific file type. +**Q: Can I use regex patterns with other file types?** +A: Yes, GroupDocs.Metadata supports PDFs, Word, Excel, images, and many more formats—over 30 in total. -### What if my regex pattern doesn’t match any properties? -Check for typos, case sensitivity, or unexpected whitespace in property names. Simplify the pattern and test against a known property. +**Q: What if my regex pattern doesn’t match any properties?** +A: Verify case sensitivity, remove unnecessary whitespace, and test the pattern against a known property name using `Pattern.matches`. -### How do I handle large datasets efficiently? -Limit regex complexity, reuse compiled patterns, and process documents in batches as described in the **Performance Considerations** section. +**Q: How do I handle large datasets efficiently?** +A: Keep regexes specific, reuse compiled `Pattern` objects, and process files in batches as described in the **Performance considerations** section. -### Where can I find more examples of metadata searches? -Explore the [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) for additional use cases and code snippets. +**Q: Where can I find more examples of metadata searches?** +A: Explore the [GroupDocs.Metadata Documentation](https://docs.groupdocs.com/metadata/java/) for additional use cases and code snippets. ## Resources - **Documentation:** [GroupDocs Metadata Java Docs](https://docs.groupdocs.com/metadata/java/) --- -**Last Updated:** 2026-02-21 +**Last Updated:** 2026-08-20 **Tested With:** GroupDocs.Metadata 24.12 for Java **Author:** GroupDocs ---- \ No newline at end of file +--- + +## Related Tutorials + +- [How to Search Metadata with GroupDocs.Metadata in Java: Efficient Tag‑Based Searches](/metadata/java/advanced-features/groupdocs-metadata-java-search-tags/) +- [Mastering Metadata Management: Search Properties by Tag Using GroupDocs.Metadata for Java](/metadata/java/working-with-metadata/groupdocs-metadata-management-java/) +- [Java Metadata Extraction: Custom Value Acceptor Guide with GroupDocs.Metadata](/metadata/java/working-with-metadata/java-metadata-extraction-custom-value-acceptor-groupdocs/) \ No newline at end of file diff --git a/content/english/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/og-image.png b/content/english/java/advanced-features/mastering-metadata-searches-regex-groupdocs-java/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..43c641755e14067bcdf6c083b88af8e6707b4987 GIT binary patch literal 54080 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%0ACHwJpvw-E8kZ5nf%cbetI?{ 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