Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →ביטוי רגולרי (Regular Expression או RegEx) הוא תבנית טקסטואלית לחיפוש, חילוץ, אימות, החלפה ופיצול של מחרוזות. לדוגמה, cat מוצא את הרצף בתוך טקסט, ואילו ^cat$ דורש שכל הקלט יהיה בדיוק cat. לפני שכותבים ביטוי צריך לבחור את מנוע ה-RegEx: JavaScript, Python, Java, PCRE2, RE2/Go ו-Rust regex חולקים תחביר בסיסי, אך אינם תומכים בדיוק באותן תכונות.
הקישורים הבאים הם התיעוד הקובע לכל מנוע: JavaScript, Python, Java, PCRE2, RE2 ו-Rust.
As an Amazon Associate I earn from qualifying purchases.
איך RegEx עובד?
המנוע מקבל טקסט ותבנית ומחזיר התאמות, קבוצות לכידה או ערך בוליאני. חיפוש מוצא קטע כלשהו; חילוץ מחזיר חלקים מסומנים; אימות בודק את כל השדה. ב-Python, למשל, search מחפש בכל המחרוזת, match מתחיל בתחילתה ו-fullmatch דורש התאמה מלאה.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallתחביר בסיסי
תווים מיוחדים
| סימן | משמעות |
|---|---|
. |
כל תו, בדרך כלל ללא newline |
^ |
תחילת קלט או שורה |
$ |
סוף קלט או שורה |
|
Escape או רצף מיוחד |
| |
או |
( ) |
קבוצה |
[ ] |
מחלקת תווים |
{ } |
כמות חזרות |
כדי להתאים תו מיוחד מילולית משתמשים ב-escape: ., ?, +, (, [ ו-\. בשפות תכנות קיימת לעיתים שכבת escape נוספת. ב-Python עדיף מחרוזת גולמית: r"d+.d+"; ב-Java יש להכפיל את הקו הנטוי: "\d+\.\d+".
#1 Best Overall
- Used Book in Good Condition
מחלקות וקיצורים
[abc]— תו אחד מבין האפשרויות.[a-z],[A-Z],[0-9]— טווחים.[^0-9]— כל תו שאינו ספרה;^הוא שלילה רק בתחילת המחלקה.d,w,s— ספרה, תו־מילה ורווח לבן; המשמעות תלויה במנוע וב-Unicode.
ב-Python, d במחרוזת Unicode עשוי להתאים לספרות רבות מעבר ל-0–9; למספרי ASCII השתמשו ב-[0-9] או בדגל ASCII. פירוט התחביר נמצא ב-Cheat sheet של JavaScript וב-תיעוד Python.
כימות, חמדנות ועוגנים
| ביטוי | משמעות |
|---|---|
? |
אפס או פעם אחת |
* |
אפס פעמים או יותר |
+ |
פעם אחת או יותר |
{n} |
בדיוק n |
{n,} |
לפחות n |
{n,m} |
בין n ל-m |
<.*> הוא כימות חמדני ועלול לבלוע כמה תגיות; <.*?> עצל ומנסה להתאים את הקטע הקצר ביותר. עצלות אינה ערובה לביצועים טובים. במנועים מסוימים קיימים גם a*+ וקבוצה אטומית (?>...); Python תומכת בהם מגרסה 3.11, וגם Java ו-PCRE2 תומכות בגרסאות דומות (Python, PCRE2).
^abc$ נראה כאימות מלא, אך multiline משנה את משמעות העוגנים, ו-$ עשוי להתאים לפני newline סופי. בדקו את ה-API; ב-Python קיימים גם A ו-z (האחרון נוסף ב-3.14), וב-Java קיימים A, Z, z ו-G. bcatb מחפש מילה שלמה, אך גבול מילה תלוי בהגדרת תו־מילה ואינו אוניברסלי בעברית או ב-CJK.
Rank #2
קבוצות, לכידה ו-lookaround
קבוצות
(d{4})-(d{2})-(d{2}) לוכד שנה, חודש ויום. כשאין צורך בתוצאה השתמשו ב-(?:https?://). קבוצות בשם שונות בין שפות: JavaScript ו-Java משתמשות ב-(?<year>d{4}), Python ב-(?P<year>d{4}).
Backreferences
(["']).*?1 דורש שסוג המרכאות בסוף יהיה זהה לסוג שבתחילה. Backreferences אינן נתמכות ב-RE2 או ב-Rust regex.
Lookaround
d+(?=%)— מספר שלפני אחוז, בלי לכלול את הסימן.^(?!admin$).+— כל ערך שאינו בדיוקadmin.(?<=$)d+— מספר אחרי דולר.(?<!-) d+— מספר שאינו אחרי מקף (יש להסיר את תו האפס; הביטוי הנכון הוא(?<!-)d+).
Lookaround אינו צורך תווים. Lookbehind ב-Python חייב בדרך כלל אורך קבוע; RE2 ו-Rust אינם תומכים ב-lookaround.
Rank #3
דגלים (Flags)
ב-JavaScript, g מחזיר את כל ההתאמות, i מתעלם מרישיות, m מפעיל multiline, s מאפשר ל-. להתאים newline, u מפעיל Unicode, v מוסיף Unicode sets, y הוא sticky ו-d מחזיר אינדקסים. Python משתמשת בשמות כגון re.IGNORECASE, re.MULTILINE, re.DOTALL, re.VERBOSE ו-re.ASCII. האותיות אינן בעלות משמעות זהה בכל מנוע.
תבניות שימושיות — עם גבולות ברורים
| מטרה | ביטוי | מה הוא באמת בודק |
|---|---|---|
| מספר שלם | ^[0-9]+$ |
ספרות ASCII בלבד |
| עשרוני פשוט | ^[0-9]+(?:.[0-9]+)?$ |
12 או 12.50; לא סימן, פסיק או מפרידי אלפים |
| מבנה תאריך | ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ |
מבנה בלבד; גם 2026-99-99 עובר |
| טלפון מוגבל | ^+?[0-9 ()-]{7,20}$ |
מבנה גס, לא קיום מספר; יש להגדיר מדינה |
| אימייל בסיסי | ^[^s@]+@[^s@]+.[^s@]+$ |
מבנה סביר, לא אימות כתובת או תקן מלא |
| URL בסיסי | https?://[^s]+ |
HTTP/HTTPS עד רווח; לא כל URL אפשרי |
| מילים שלמות | b(error|warning|critical)b |
תלוי בהגדרת גבול מילה |
| רווחים כפולים | [ t]{2,} |
החלפה ברווח יחיד |
| מספרים בטקסט | -?[0-9]+(?:.[0-9]+)? |
לא פורמטים מקומיים או ספרות Unicode |
להחלפת תאריך (?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2}), JavaScript משתמשת ב-$<day>/$<month>/$<year>, Python ב-g<day>/g<month>/g<year>, וב-Java לעיתים ב-$3/$2/$1. בדיקת תאריך קלנדרית, אימייל אמיתי או מספר טלפון דורשת קוד ושירות אימות נוספים.
שימוש בקוד
JavaScript
const re = /bd{4}-d{2}-d{2}b/g;
const text = "Dates: 2026-08-18 and 2026-12-31";
console.log(text.match(re));
שיטות מרכזיות: test, match, matchAll, replace, search ו-split. אפשר להשתמש בליטרל או ב-new RegExp(pattern, flags); בבנייה ממחרוזת יש לזכור escape כפול.
Python
import re
text = "Dates: 2026-08-18 and 2026-12-31"
pattern = re.compile(r"bd{4}-d{2}-d{2}b")
print(pattern.findall(text))
בנוסף קיימים re.finditer, re.sub ו-re.split. השתמשו ב-fullmatch לאימות במקום להסתמך תמיד על ^ ו-$.
Rank #4
- Used Book in Good Condition
Java, .NET, Go ו-Rust
Pattern pattern = Pattern.compile("\b\d{4}-\d{2}-\d{2}\b");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) System.out.println(matcher.group());
ב-.NET משתמשים ב-Regex.IsMatch, Match, Matches ו-Replace; לקלט שאינו בשליטתכם הגדירו timeout לפי תיעוד ה-API (מדריך .NET). Go regexp מבוסס RE2, ו-Rust:
use regex::Regex;
let re = Regex::new(r"bd{4}-d{2}-d{2}b").unwrap();
for mat in re.find_iter("2026-08-18") { println!("{}", mat.as_str()); }
Rust regex אינו תומך ב-lookaround וב-backreferences, אך מתעד גבולות ביצועים; גם מנועים ללא backtracking אינם חסינים לכל עומס.
איך בונים ביטוי בצורה שיטתית?
- נסחו את הדרישה במילים.
- כתבו את החלקים המילוליים, למשל מקפים.
- החליפו סוגי תווים במחלקות ובכימות:
[0-9]{4}-[0-9]{2}-[0-9]{2}. - הוסיפו גבולות רק אם מדובר באימות מלא.
- הוסיפו קבוצות לכידה רק לחילוץ, חלופה או כימות משותף.
- בחרו greedy או lazy לפי התוצאה הדרושה.
- בדקו חיוביים, שליליים, ריקים, ארוכים, Unicode ו-newline.
- הריצו את הביטוי ב-flavor האמיתי והוסיפו בדיקות יחידה.
- בדקו ביצועים על קלט ארוך או לא מהימן.
הבדלים בין מנועי RegEx
| תכונה | JavaScript | Python | Java | PCRE2 | RE2/Go | Rust regex |
|---|---|---|---|---|---|---|
| קבוצות לכידה | כן | כן | כן | כן | כן | כן |
| Lookahead | כן | כן | כן | כן | לא | לא |
| Lookbehind | מודרני | כן, לרוב קבוע | כן | כן | לא | לא |
| Backreferences | כן | כן | כן | כן | לא | לא |
| תכנון ללא backtracking | לא בהכרח | לא בהכרח | לא בהכרח | לא בהכרח | כן | כן, עם מגבלות מתועדות |
זו טבלת התמצאות, לא הבטחת תאימות לכל גרסה. בדקו תמיד את תיעוד המנוע: MDN, Python, Java, PCRE2, RE2 ו-Rust.
Best Value
- Used Book in Good Condition
Unicode, עברית ושפות טבעיות
d, w ו-b אינם הגדרות אוניברסליות. ניקוד ותווים משלבים, אימוג’י וגרפים מורכבים גורמים לכך שמספר code points אינו בהכרח מספר האותיות שהמשתמש רואה. החליטו אם אתם עובדים על bytes, code points, grapheme clusters והאם הטקסט מנורמל. Java מתעדת b{g} ו-X לגבולות grapheme (Java Pattern). הטווח [u0590-u05FF] הוא דוגמה מוגבלת בלבד ואינו כולל בהכרח כל סימן, ניקוד או תו משלב בעברית.
בדיקה וניפוי
Regex101 מציע בחירת flavor, הסבר, debugger, החלפה, בדיקות יחידה ויצירת קוד; בזמן הבדיקה ברירת המחדל הייתה PCRE2 (PHP). בחרו שם את המנוע שבו היישום באמת משתמש: הצלחה ב-PCRE2 אינה מוכיחה תאימות ל-JavaScript, Python או Go.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →- הכינו מקרי הצלחה וכישלון, קלט ריק, ארוך וכמעט־תקין.
- בדקו Unicode, newline, תווים מיוחדים וכמה התאמות באותו טקסט.
- הריצו את אותן בדיקות בתוך הפרויקט עצמו.
- השתמשו ב-debugger או בהדפסה של קבוצות כדי לאתר את החלק שנלכד.
ביצועים ואבטחה: ReDoS
במנועי backtracking, תבניות עם כימויים מקוננים או חלופות חופפות עלולות לגרום לזמן ריצה קיצוני. OWASP מתארת זאת כ-ReDoS: צריכת CPU חריגה שעלולה לעכב או להשבית שירות (OWASP). ^(a+)+$ היא דוגמה רעיונית לקלט בעייתי.
- הגבילו את אורך הקלט והתבנית.
- הימנעו מ-
.*וכימויים חופפים כשאפשר; העדיפו מחלקות מדויקות. - הגדירו timeout ב-API המתאים ואל תאפשרו RegEx חופשי ללא sandbox.
- בחרו RE2 או Rust
regexכשנדרשות מגבלות ביצועים צפויות, תוך בדיקת העלות על קלטים גדולים.
מתי לא להשתמש ב-RegEx?
- HTML/XML מקוננים או שבורים — השתמשו בפרסר.
- JSON ונתונים מקוננים — השתמשו בפרסר ייעודי.
- תאריכים, חשבונאות ומספרים מקומיים — השתמשו בספריות סמנטיות.
- אימייל אמיתי — בדיקת מבנה ולאחריה אימות באמצעות הודעה.
- שפה טבעית, גבולות מילים מורכבים או עברית עשירה — שקלו כלי Unicode או NLP.
סיכום מעשי
התחילו מדרישה מילולית, בנו את הביטוי בהדרגה, והבדילו תמיד בין חיפוש, חילוץ ואימות. בחרו flavor לפני העתקת תחביר, השתמשו ב-escape ובגבולות במקומות הנכונים, בדקו מקרי קצה ו-Unicode, והוסיפו הגנות ביצועים כאשר הקלט אינו מהימן. ביטוי קצר אינו בהכרח טוב יותר מביטוי קריא, תואם ובטוח.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

