חיפוש/החלפה הכל על GREP (גרפ) באינדיזיין

GOLDRING

משתמש פעיל
עיצוב גרפי
עימוד ספרים
תודה רבה!!!
מצאתי הפתרון [בזכות הרמז של Goldring]:
קוד:
\(((?>[^()]+)|(?R))*\)


כל הכבוד! יגעת ומצאת תאמין!
למעשה קצת הארכת במקום שאפשר לקצר, ניתן להסתפק בצורה הבאה:
קוד:
\(([^()]|(?R))*\)
זה למעשה מספק עד אין סוף סוגריים בתוך סוגריים, כל זמן שיש התאמה בין מספר הסוגריים הפותחות לסוגרות...
 

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
זהירות! סכנת כאבי ראש...​
כל הכבוד! יגעת ומצאת תאמין!
למעשה קצת הארכת במקום שאפשר לקצר, ניתן להסתפק בצורה הבאה:
קוד:
\(([^()]|(?R))*\)
זה למעשה מספק עד אין סוף סוגריים בתוך סוגריים, כל זמן שיש התאמה בין מספר הסוגריים הפותחות לסוגרות...
למעשה יש סיבה למה הוספתי את זה:
קוד:
(?>...)
זאת אומרת למנוע הגרפ לא לנסות עוד פעם על אותם תוים אם הם לא התאימו בפעם הראשון;
למשל: אם עושים החיפוש הנ"ל על הטקסט הזה -
קוד:
(אאאאאאאאאאאאאאאאאאאאאאאא()
מנוע הגרפ יתחיל עם האות הראשון וינסה למצוא התאמה ממנו עד האות האחרונה [עם כל האופנים שאפשר להיות בגלל ה* וה|], וכשלא ימצא יתחיל עוד פעם מהאות השניה, וחוזר חלילה; אז אם מבצעים החיפוש הזה על מסמך ארוך, זה יכול לקחת המון זמן, ובמקרה הזה שיש בתוך הקוד אפשרות לחזרה בלתי מוגבלת, זה יכול לקחת המון זמן [אלפי שנים במקרים!!!], כי צריך לחשבן כל האופנים עד שהוא יכול להגיד שאין התאמה...
בשביל זה יש את הקוד (?>...) שאומר תבדוק את הקוד הזה רק פעם אחת, דהיינו שאחרי שבפעם הראשון יצא אי התאמה, המנוע יעבור לטקסט הבא ולא יחזור מהאות השני.
אז הפתרון שלי הוא:
קוד:
\(((?>[^()]+)|(?R))*\)
--------------------------------------------------------------------------
אגב, הקוד הנ"ל לא עוצר בפיסקה חדשה; אם רוצים שלא יעבור לפיסקה חדשה, פשוט מוסיפים \r לקבוצה השלילי. ככה:
קוד:
\(((?>[^()\r]+)|(?R))*\)
 
נערך לאחרונה ב:

GOLDRING

משתמש פעיל
עיצוב גרפי
עימוד ספרים
זהירות! סכנת כאבי ראש...​

למעשה יש סיבה למה הוספתי את זה:
קוד:
(?>...)
זאת אומרת למנוע הגרפ לא לנסות עוד פעם על אותם תוים אם הם לא התאימו בפעם הראשון;
למשל: אם עושים החיפוש הנ"ל על הטקסט הזה -
קוד:
(אאאאאאאאאאאאאאאאאאאאאאאא()
מנוע הגרפ יתחיל עם האות הראשון וינסה למצוא התאמה ממנו עד האות האחרונה [עם כל האופנים שאפשר להיות בגלל ה* וה|], וכשלא ימצא יתחיל עוד פעם מהאות השניה, וחוזר חלילה; אז אם מבצעים החיפוש הזה על מסמך ארוך, זה יכול לקחת המון זמן, ובמקרה הזה שיש בתוך הקוד אפשרות לחזרה בלתי מוגבלת, זה יכול לקחת המון זמן [אלפי שנים במקרים!!!], כי צריך לחשבן כל האופנים עד שהוא יכול להגיד שאין התאמה...
בשביל זה יש את הקוד (?>...) שאומר תבדוק את הקוד הזה רק פעם אחת, דהיינו שאחרי שבפעם הראשון יצא אי התאמה, המנוע יעבור לטקסט הבא ולא יחזור מהאות השני.
אז הפתרון שלי הוא:
קוד:
\(([^()]|(?R))*\)
--------------------------------------------------------------------------
אגב, הקוד הנ"ל לא עוצר בפיסקה חדשה; אם רוצים שלא יעבור לפיסקה חדשה, פשוט מוסיפים \r לקבוצה השלילי. ככה:
קוד:
\(((?>[^()\r]+)|(?R))*\)


אתה צודק! אכן ראוי להוסיף זאת, כדי למנוע סיבוכיות!
 
נערך לאחרונה ב:

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
לכל התמהים איך זוכרים את כל הקודים - אל תדאגו, [כמעט] כל הקודים רשומים באינדיזיין.
בצד השדה יש כפתור "@", שפותח תפריט עם רוב הקודים של גרפ, ולכם לא נשאר רק לשלב אותם לצרכים שלכם...
[יש להמתין קצת עד שהתמונה מתחיל לזוז...]
1grep1.gif
 
נערך לאחרונה ב:

eliezer

מהנדס בינה מלאכותית
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
הנדסת תוכנה
D I G I T A L
נוסחה נחמדה, ארוכה מידי.... וגם לא מוצאת כשיש רק סוגריים בודדות, מה שאומר שצריך לעבוד פעמיים, ראשית למצוא סוגריים רגילות ואח"כ לחפש כפילויות של סוגריים בתוך סוגריים וכדו'.
יש פתרון הרבה יותר פשוט במסגרת חיפוש גרפ, אבל בא לי לעשות מזה אתגר קטן:
תנסו אתם, מומחי הפורום, למצוא גרפ שמכיל את כל האפשרויות של סוגריים [גם בודדות וגם כפולות ומשולשות וכו']...

רמז: הגרפ מכיל פחות מ-20 סימנים


יפה מאד! לא הכרתי הרעיון הזה.
 

eliezer

מהנדס בינה מלאכותית
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
הנדסת תוכנה
D I G I T A L
אתה צודק! אכן ראוי להוסיף זאת, כדי למנוע סיבוכיות!
איפה מצאתם את הרעיון היפה הזה? כמדומני אופציות אלו לא מופיעות ברשימות של התפריט, או במקם רשמי של התוכנה שמוכר לי
 

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
איפה מצאתם את הרעיון היפה הזה? כמדומני אופציות אלו לא מופיעות ברשימות של התפריט, או במקם רשמי של התוכנה שמוכר לי
יש הרבה שלא מופיעים בשום מקום באינדיזיין [למשל \K גם לא מופיע]...
מצאתי ע"י חיפוש גוגל -
https://caspar.bgsu.edu/~courses/Stats/Labs/Handouts/grepadvanced.htm
@GOLDRING הציע האתר הזה - בשביל אנשים שאוכלים גרפ לארוחת בוקר...
http://www.rexegg.com
 
נערך לאחרונה ב:

GOLDRING

משתמש פעיל
עיצוב גרפי
עימוד ספרים
איפה מצאתם את הרעיון היפה הזה? כמדומני אופציות אלו לא מופיעות ברשימות של התפריט, או במקם רשמי של התוכנה שמוכר לי

יש דברים רבים שלא נמצאים בשום פירוט בתוכנה, אבל מקובלים וידועים לכל מי שעוסק בתכנות, ולכן גם תקפים לאינדזיין.
לדוגמה הצעתי ליהודה בהודעה פרטית לעיין באתר http://www.rexegg.com
שהוא באמת אתר מדהים בכל הנושא הזה, וניתן למצוא בו הרבה דברים מעניינים
אבל יש עוד הרבה אתרים שעוסקים בתחום...

דרך אגב, אני כמעט קבוע מכניס את הנוסחה הנ"ל בתוך גרפ סטייל, על מנת להקטין סוגריים, וכמובן זה חוסך הרבה כאב ראש
 
נערך לאחרונה ב:

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
GREP הוא מעין שפת תכנות, שעובד ביחד עם הרבה שפות תכנות.
למשל, Perl, Python, Java, Javascript, .Net, PHP, Ruby [ועוד...] כולם תומכים בGREP.
החברה ב-Adobe [למזלינו...] הכניסו את האפשרות הזאת לאינדיזיין, כדי שיהיה אפשר לעבוד עם טקסט ע"י גרפ.
 

eliezer

מהנדס בינה מלאכותית
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
הנדסת תוכנה
D I G I T A L
יש דברים רבים שלא נמצאים בשום פירוט בתוכנה, אבל מקובלים וידועים לכל מי שעוסק בתכנות, ולכן גם תקפים לאינדזיין.
לדוגמה הצעתי ליהודה בהודעה פרטית לעיין באתר http://www.rexegg.com
שהוא באמת אתר מדהים בכל הנושא הזה, וניתן למצוא בו הרבה דברים מעניינים
אבל יש עוד הרבה אתרים שעוסקים בתחום...

דרך אגב, אני כמעט קבוע מכניס את הנוסחה הנ"ל בתוך גרפ סטייל, על מנת להקטין סוגריים, וכמובן זה חוסך הרבה כאב ראש
תודה!

אגב, בספר שאני מעמד עכשיו, כל בחירת טקסט, אפילו אות, תקע את התוכנה ל2,3 דקות!
אך ברגע שבטלתי את הגרפ סטייל, היא עובדת מצויין.

אגב נוסף, אני עובד הרבה עם גרפ, אבל מאז שהתחלתי להתעסק בסקריפטים, אני מוצא שקל בהרבה לפתור בעיות מורכבות בטקסט, על ידי סקריפט מאשר על ידי הרצת גרפים. (לדוגמה הסקריפט של ר' אריאל "ChangeConsecutiveParagraphs1.7.1")
ובמקרה שיש צורך בכזה דבר, אני פשוט מכניס את הרצף הזה לסקריפט... למשל כמה דוגמאות פשוטות:
לנקות כל הסגנונות פסקה שיש להם גם סגנונות תו מיותרים. להחיל עיצוב על בולד ידני, וכו'

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

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
אגב, בספר שאני מעמד עכשיו, כל בחירת טקסט, אפילו אות, תקע את התוכנה ל2,3 דקות!
אך ברגע שבטלתי את הגרפ סטייל, היא עובדת מצויין.
נכון, אפילו במחשב עוצמתי זה קורה [כנראה שהם יכולים לשפר את הקוד של אינדיזיין]...
אצלי הגרפ סטייל לא מאיט כ"כ, אלא כשיש הרבה עמודים עם שתי טורים, ויש גם כותרות שהם באמצע הטורים [span collumns], זה מאיט אותו מאוד, כי לכל שינוי קטן הוא מחשבן מחדש את מיקום כל העמודים [ובפרט כשיש גם keep options, וכדומה].
אבל מאז גירסת 2017 וביותר 2018 CC זה השתפר קצת...
 

GOLDRING

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

מי כמוך יודע שגם בזה אני לא טומן ידי בצלחת;).

נכון, אפילו במחשב עוצמתי זה קורה [כנראה שהם יכולים לשפר את הקוד של אינדיזיין]...
אצלי הגרפ סטייל לא מאיט כ"כ, אלא כשיש הרבה עמודים עם שתי טורים, ויש גם כותרות שהם באמצע הטורים [span collumns], זה מאיט אותו מאוד, כי לכל שינוי קטן הוא מחשבן מחדש את מיקום כל העמודים [ובפרט כשיש גם keep options, וכדומה].
אבל מאז גירסת 2017 וביותר 2018 CC זה השתפר קצת...

span collumns, נעשה בצורה כ"כ גרועה, ואותו דבר לגבי מה שהם חידשו שאפשר לעשות הערות בטור אחד כשהטקסט הראשי ב2 טורים. זה כתוב בצורה חובבנית לגמרי שתוקעת את התוכנה.
יש להם מה ללמוד אפילו מוורד שעשו את זה בצורה נקייה לחלוטין שלא תוקעת את המסמך. עצם ההתעקשות שלהם להכניס כל הערה והערה בסטורי נפרד, כך שאי אפשר לבחור את כולם יחד, וממילא א"א לעשות אותם 2 טורים ועוד, מראה על חשיבה מקובעת מאוד!
 

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
בואו להכיר את הקודים הבאים:
1) תחילת מילה
קוד:
\<
למשל - אם רוצים לחפש אל"ף, אבל רק כשבתחילת מילה, כותבים:
קוד:
\<א
2) סוף מילה
קוד:
\>
3) גבול מילה
קוד:
\b
זה קוד לגבול של מילה, דהיינו או תחילת מילה או סוף מילה.
זה בא בשימוש כשרוצים לחפש מילה, אבל רק כשהוא מילה שלימה, למשל אם מחפשים את המילה "או", הוא ימצא גם "או" וגם "אומר", ובכדי למנוע זאת כותבים:
קוד:
\bאו\b
4) תחילת פיסקה
קוד:
^
5) סוף פיסקה
קוד:
$
 

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
ז'וקרים [wildcards]
יש כמה סוגי קודים שמוצאים הכל מה שכלול בקטגוריה שלהם.
1) כל סוג תו
קוד:
.
[נקודה] מוצא כל סוג תו, ההההכל, חוץ מסימן סוף פיסקה.
2) כל מספר
קוד:
\d
מוצא כל מספר
3) כל רווח
קוד:
\s
כידוע, באינדיזיין יש 12 סוגי רווח [שיכולים להיות מאוד שימושיים...], אז זה מוצא כל סוג של רווח.
4) כל תו מילה
קוד:
\w
מוצא כל התוים של מילים, ולא כל מיני פיסוק, רווחים וסימנים.
---------------------------------------------------------------------------
גם אם רוצים לחפש כל מה שאיננו מספר, כותבים "\D", זה אותו קוד [מס' 2] רק עם D גדול [במקום d קטן]. וכן בכל הקודים שנזכרו כאן [בתגובה הזו, חוץ מ"." (נקודה) שאין לו גדול], אם מחליפים את האות לגדול, זה יחפש שלילי. אז "\S" ימצא כל מה שאיננו רווח, ו"\W" ימצא כל מה שאיננו תו מילה...
 

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
חיפוש בכמות [repeat]
עד עכשיו כששמנו קוד מסוים, זה מוצא תו אחד שתואם להקוד. למשל, "\s" ימצא רווח אחד אפילו אם יש שני רווחים אחד אחר השני [רק אם עושים את החיפוש עוד פעם, הוא ימצא את הרווח הבא].
אז אם רוצים למצוא איפה יש שתי רווחים ביחד, אפשר לכתוב "\s\s"...
אבל יש דרך יותר טוב:
1) פעם אחד או יותר
קוד:
+
סימן זה ימצא את התו פעם אחד או יותר, אז אם כותבים
קוד:
\s+
הוא ימצא רווח אחד, וגם שתי רווחים, ואפילו מאה רווחים...
עוד דוגמא - אם רוצים להחיל סגנון מסויים על כל הטקסט שבתוך סוגריים, צריכים להגדיר סוגריים בגרפ. אז לכאורה אפשר להגדיר אותו ככה: סוגריים פותח; כל תו פעם אחד או יותר; וסוגריים סוגר.
קוד:
\(.+\)
אבל יש בזה בעיה קטנה, שהנקודה כולל כל תו, וגם סוגריים נכללים בו, שהרי חוץ מסוף פיסקה הכל כלול בהנקודה, וממילא אם יש שתי סוגריים באותו פיסקה, הוא ימצא הכל מהסוגריים הפותח הראשון עד הסוגריים הסוגר האחרון... כמו כאן:
Screen Shot 2017-12-17 at 7.31.59.png

אז צריך להגיד לה + שיחזור על התו שלו [נקודה, בנידונינו] עד ההתאמה הראשון של התו הבא [סוגריים סוגר, בנידונינו]; והקוד לזה הוא "?", וכותבים ככה:
קוד:
\(.+?\)
(מוסיפים ? אחרי ה +).
עכשיו הוא מוצא רק סוגריים אחד, כמו בתמונה -
Screen Shot 2017-12-17 at 7.31.02.png

2) אפס או אחד פעמים
קוד:
?
אם יש תו שיכול להיות בטקסט המבוקש, אבל יכול להיות שלא יהיה; למשל רוצים לחפש את השם "אליהו", אבל יכול להיות שכתוב "אלי", אז אפשר לכתוב ככה:
קוד:
אליה?ו?
(ה ? השני הוא אחרי הוא"ו, זה נראה הפוך...)
פירוש: ה"א וא"ו יכולים להיות אפס פעמים או פעם אחד.
3) אפס או יותר פעמים
קוד:
*
למשל - אם רוצים לחפש המילה "מהר", אבל גם כשכתוב "מהר!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", אפשר לכתוב ככה:
קוד:
מהר!*
(גם כאן זה נראה הפוך. אם תעתיקו הקוד זה יצא נכון)
פירוש: שה ! יכול להיות אפס או יותר פעמים...
-----------------------------------------------------
גם בקודים האלו (מס' 2 ו-3) אם רוצים להגביל אותו עד להתאמה הראשונה, מוסיפים ? אחריו.
 

גיוון

צוות הנהלה
מנהל
מנוי פרימיום
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי DIP
עיצוב גרפי
עימוד ספרים
מדוע עוד לא נעצו את האשכול בראש הפורום???
 

יידישע קאפ

משתמש סופר מקצוען
מנוי פרימיום
עיצוב גרפי
צילום מקצועי
עריכה והפקת סרטים
עימוד ספרים
חיפוש אצל תוים
1) הסתכל מאחורה חיובי [positive lookbehind]

קוד:
(?<=)
אפשר לחפש תו רק אם יש לפניו תו מסויים, למשל אם רוצים לחפש "א" רק כשמגיע אחרי "ת", כותבים -
קוד:
(?<=ת)א
שימו לב שה"ת" הוא לא חלק מהתוים שיימצאו בחיפוש, הוא רק מה שצריך להיות קודם להם...
2) הסתכל מאחורה שלילי [negative lookbehind]
אם רוצים לחפש תו רק אם לא מגיע אחרי תו מסויים -
קוד:
(?<!)
למשל אם רוצים לחפש "א" רק כשאין "ת" לפניו, כותבים -
קוד:
(?<!ת)א
3) הסתכל קדימה חיובי [positive lookahead]
אם רוצים לחפש תו רק אם יש אחריו תו מסויים -
קוד:
(?=)
למשל אם רוצים לחפש "א" רק כשיש "ת" אחריו, כותבים -
קוד:
א(?=ת)
4) הסתכל קדימה שלילי [negative lookahead]
אם רוצים לחפש תו רק אם אין אחריו תו מסויים -
קוד:
(?!)
למשל אם רוצים לחפש "א" רק כשאין "ת" אחריו, כותבים -
קוד:
א(?!ת)
--------------------------------------------------------------------------
אפשר גם לשלב השוואה לקדימה ולאחורה ביחד;
כגון אם רוצים לחפש מילה, רק אם כתוב לפניו "אברהם", וגם כתוב אחריו "משה", כותבים -
קוד:
(?<=אברהם)\w+(?=משה)
ביאור [למי שלא זוכר...]
[בתגובה הבא]
 
נערך לאחרונה ב:

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קכו

א שִׁיר הַמַּעֲלוֹת בְּשׁוּב יי אֶת שִׁיבַת צִיּוֹן הָיִינוּ כְּחֹלְמִים:ב אָז יִמָּלֵא שְׂחוֹק פִּינוּ וּלְשׁוֹנֵנוּ רִנָּה אָז יֹאמְרוּ בַגּוֹיִם הִגְדִּיל יי לַעֲשׂוֹת עִם אֵלֶּה:ג הִגְדִּיל יי לַעֲשׂוֹת עִמָּנוּ הָיִינוּ שְׂמֵחִים:ד שׁוּבָה יי אֶת (שבותנו) שְׁבִיתֵנוּ כַּאֲפִיקִים בַּנֶּגֶב:ה הַזֹּרְעִים בְּדִמְעָה בְּרִנָּה יִקְצֹרוּ:ו הָלוֹךְ יֵלֵךְ וּבָכֹה נֹשֵׂא מֶשֶׁךְ הַזָּרַע בֹּא יָבוֹא בְרִנָּה נֹשֵׂא אֲלֻמֹּתָיו:
נקרא  106  פעמים

אתגר AI

תאומים • אתגר 145

לוח מודעות

למעלה