כללי שאלה | אינדיזיין - GREP - באג

  • הוסף לסימניות
  • #1
אני מנסה למצוא את הרווח האחרון של כל פסקה.

בעקרון זה היה אמור לעבוד ככה:
חפש רווח, הסתכלות חיובית אחורה לכל התוים כלום ויותר הפחות מביניהם, סימן פסקה.
אבל זה לא עובד. (למה? עוד לא יודע)


אז ניסיתי:
חפש רווח, כל התוים כלום או יותר הפחות מביניהם, הסתכלות חיובית אחורה לסימן פסקה.
אבל משום מה, הוא תופס לי הכל החל מהרווח הראשון בפסקה. למה זה קורה לי?
קוד:
 .*?(?=\r)
 
  • הוסף לסימניות
  • #2
זה לא באג. ככה בקשת. זה בגלל דבר שנקרא "greedy". והוא נושא קצת ארוך...

אתה רוצה את זה:
קוד:
 \S+ ?$

או זה:
קוד:
 \S+$
 
  • הוסף לסימניות
  • #3
תודה תודה. אבל אני לא רוצה שיקח לי גם את הטקסט הבא. אני רוצה רק את הרווח.
גם לא בחבילות, פשוט משהו בסגנון של הסתכל קדימה.

ועוד משהו. איפה לומדים על הGREEDY?
 
  • הוסף לסימניות
  • #4
כאן:
http://www.regular-expressions.info/repeat.html

lookahead and lookbehind, שניהם מוגבלים לכמות מוגדרת של תווים.
http://www.regular-expressions.info/lookaround.html
(קרוב לסוף העמוד)

אני לא הבנתי בדיוק המבוקש. אם אתה תסביר יותר טוב מה בדיוק אתה רוצה לעשות אולי אני אצליח לעזור עם המחרוזת GREP הנכון. (מה אתה רוצה לעשות עם הרווח?)
 
  • הוסף לסימניות
  • #5
רציתי שיחפש לי את הרווח (ורק אותו) שנמצא לפני סוף הפסקה. כדי לשנות אותו לרווח בלתי שביר (~S)
ועוד משהו שאני מחפש, אשמח אם תכתוב את הנוסחה.
אני רוצה לחפש פסקאות שיש להם בין רווח אחד עד 10 רווחים. ושיבחר לי את כל הפיסקה.
 
  • הוסף לסימניות
  • #6
אם ככה זה זה:
קוד:
 (\S+ ?)$
ולהחליף ל:
קוד:
~S$1

בקשר לבקשה השניה, הייתי כותב בשביל זה סקריפט...
 
  • הוסף לסימניות
  • #7
אולי מי מהמומחים לענין יעלה איזה מדריכון קצר (או יותר) על כתיבת הקודים האלו ב'גרפ' לטובת אלו שלא קוראים אנגלית.

בבקשה.
 
  • הוסף לסימניות
  • #8
הארבס, מותר לשאול עוד משהו? מה זה:
DIPTC_DEBUG

הנה דוגמא

(^|[[:space:]])(-g|-pg|-DIPTC_DEBUG)([[:space:]]|$)</pre>
 
  • הוסף לסימניות
  • #9
נכתב ע"י ycs;81808:
אולי מי מהמומחים לענין יעלה איזה מדריכון קצר (או יותר) על כתיבת הקודים האלו ב'גרפ' לטובת אלו שלא קוראים אנגלית.

בבקשה.
כאילו לעשות את התפריטים בעברית?
כי ללמוד לומדים בעיקר עם לנסות לשחק ב'גרפים'.
 
  • הוסף לסימניות
  • #10
נכתב ע"י ונתנו10;81826:
הארבס, מותר לשאול עוד משהו? מה זה:
DIPTC_DEBUG

הנה דוגמא

(^|[[:space:]])(-g|-pg|-DIPTC_DEBUG)([[:space:]]|$)</pre>

מותר לשאול הכל -- אבל לא תמיד יהיה לי תשובות. ;)

האמת היא שאני לא יודע בדיוק מה זה. נראה לי שקשור לדיבוג חיבורי IP. מאיפה לקחת המשפט?
 
  • הוסף לסימניות
  • #11
נכתב ע"י Harbs;81967:
האמת היא שאני לא יודע בדיוק מה זה. נראה לי שקשור לדיבוג חיבורי IP. מאיפה לקחת המשפט?
חיפשתי על המושג גרידי, ואם אפשר להתגבר על זה (הבנתי שזה מושג שהוא מחפש תמיד המקסימום בחיפוש שזה יכול להיות אפשרי) והגעתי לזה באחד האתרים, והבנתי כאילו שזה מתגבר על בעיית הגרידי.
ולא הבנתי איך להשתמש בזה.
 
  • הוסף לסימניות
  • #12
נכתב ע"י ונתנו10;81969:
חיפשתי על המושג גרידי, ואם אפשר להתגבר על זה (הבנתי שזה מושג שהוא מחפש תמיד המקסימום בחיפוש שזה יכול להיות אפשרי).

אני מצרף הסבר מהאתר שהמלצתי עליו בהודאה קודמת (כדאי לקרוא הכל שם -- יש שם ים של אינפורמציה):
Laziness Instead of Greediness

The quick fix to this problem is to make the plus lazy instead of greedy. Lazy quantifiers are sometimes also called "ungreedy" or "reluctant". You can do that by putting a question mark behind the plus in the regex. You can do the same with the star, the curly braces and the question mark itself

אז בקיצור, תמיד תוסיף סימן שאלה אחרי כל "דגוקר" שאמור להיות גריידי והוא יהפך ללייזי.

HTH
 
  • הוסף לסימניות
  • #13
חזק מאוד. תודה
חשבתי שכבר מצאתי את הנוסחה למצוא פסקאות עם עד 10 רווחים.
אבל זה לא בדיוק עובד. למה?

קוד:
^.+ {1,10}.+?\r
 
  • הוסף לסימניות
  • #14
בגלל שה"{} מתיחס רק לרווח. אתה רוצה משהוא כזה:

קוד:
^(\w+ ?){1,10}$
 
  • הוסף לסימניות
  • #15
את זה הבנו.
אנחנו רוצים 10 מילים בפיסקה:(
(ישבתי ע"ז 4 שעות!)
 
  • הוסף לסימניות
  • #16
פחות או יותר זה אמור להיות זה, ובכל זאת זה לא תמיד עובד.
אני מתחיל להאמין שאתה צודק בקשר לסקריפט...
RC, ישבנו ע"ז יותר זמן, תסתכל על השעון...
 
  • הוסף לסימניות
  • #17
לא חישבנת את הגרעינים שפיצחתי על הדרך...
עזוב, אמרתי לך - החלפות עושים בתג...
 
  • הוסף לסימניות
  • #18
נכתב ע"י RCpro;82772:
עזוב, אמרתי לך - החלפות עושים בתג...
ממש לא רוצה להסכים איתך.
פשחות או יותר אנחנו בכיוון הנכון. ואי"ה נמצא את זה.
החלטתי שהתייאשתי מוקדם מדי.
 
  • הוסף לסימניות
  • #19
אז ככה, מצאתי עכשיו עוד איזה באג קטן.
אם יש לי ניקוד בתוך המילה, הוא לא ימצא לי את זה עם ה: +w\
למה?
 
  • הוסף לסימניות
  • #20
רק לא בתג! ;)

מה לא עובד? אני בדקתי ונראה לי שמחרוזת שלי עובד מצוין. הבעיה עם המחרוזת שלך היא שאתה מחפס סוף פיסקא. אתה צריך לחפש לפני סוף פסקא ($).

המחרוזת הזה נראה לי קצת יותר טוב:
קוד:
^(\S+\s?){1,10}$
 

פרוגבוט

תוכן שיווקי
פרסומת

פוסטים חדשים שאולי לא קראת....

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה