כמה גדול ומגוון הוא עולם המידע,כל כך מהר הוא מתרחב ומתפתח. כל פתרון הוא רק רגע בתהליך הכללי של התנועה. הידע והניסיון מאפשרים להבין את תהליך השגת המטרה, אך לעולם לא את התוצאה של השגתה. ספק אם בעתיד הנראה לעין אפשר לדבר על התוצאה, אך חשוב מאוד שתהליך השאיפה אליה הוא תהליך הכרחי ואובייקטיבי.
"תשוקה ו / או כסף גדול" אינו יוצראלגוריתם המסוגל למה שהאדם עושה באופן טבעי ו"חופשי ", במיוחד כשהוא לא חושב על מה שהוא עושה. בכל מצב של בעיית המידע, יש לפחות נקודה אחת לבן, אבל מאחוריה, בדרך כלל מיד, כתמים ריקים אחרים נראים, וזה לא בהכרח כי הם כולם לבנים.
טכנולוגיות אינטרנט יש גישה פשוטה מאודלמידע, אבל השאלה - איך לכפות על הרצוי - לא הייתה פשוטה, אלא רכשה "כרכים" חדשים של עבודה. ואף על פי PHP ביטויים רגולריים הפער הוא בבירור לא מותש, הם צעד משמעותי קדימה.
על ידי הצעת ביטויים רגולריים, PHP הוא חיונימפחית את התוכן של האלגוריתם, אבל החיפוש הרגיל / להחליף פונקציות ואלגוריתמים עיבוד שנמצאו לא איבדו את ערכם. רעיונות חדשים אינם מעידים על מהפיכת המידע. המקסימום שניתן לסמוך עליו הוא קוד קומפקטי והיכולת של המפתחים לנסח בצורה נכונה שאילתת חיפוש.
אתה צריך לדעת וליישם PHP רגילביטוי. הדוגמאות משכנעות ויעילות. אבל יש לדווח כי עם כניסתו של מנוע החיפוש החדש, מרכז הכובד עבר לתבנית - מעין מנגנון, אם כי למעשה הוא מחליף פונקציות חיפוש פשוטות רבות, תנאים, מחזורים ומפעילים אחרים.
יש:
השגת הידע, כפי שהיה הכרחי כדי להבין את הבעיה, על מנת לפתור אותה, לעתים קרובות יש משמעות יותר מאשר תוצאה מסוימת.
ביטויים רגולריים ב- PHP מיוצגיםמספר פונקציות בתחביר של השפה ודוגמאות שימושיות רבות באינטרנט. בשל הפרטים של התחביר של השפה, את אפשרויות היישום מוגבלים רק על ידי הדמיון של היזם, עם זאת, יש לציין כי לא כל תבניות יעבוד. עם PHP, בדיקת ביטויים רגולריים היא חיונית.
סמל אינו תמיד בית אחד, ולעתים קרובות דמות,כקלף, יש לו משמעות מדויקת בנוסף. קידוד מציין את התווים הגלויים לעין בקוד שונה. הסמל יכול להיות מספר אפשרויות: "$" = "דולר" = "דולר", ... - המשמעות המדויקת של שמשהו איפשהו, אבל לא בהכרח קרוב, בשל המטבע. עם זאת, את המשמעות המדויקת נעוצה ככל הנראה PHP משתנה, אשר תמיד מתחיל עם הדמות "$", אבל לא יכול להתחיל עם "דולר" ו "דולר".
בתוכניות, סמל יכול להיות שם פונקציה(מחרוזת) בהקשר: לזהות ולבצע הוא משדה של תכנות מונחה עצמים דינמי, שבו PHP בונה, פונקציות, ביטויים רגולריים משמשים ישירות לקבלת החלטות. הסמל שנמצא הוא "להורג", כלומר, הוא קובע בעצמו מה לעשות במקום שבו הוא נמצא, וכיצד הוא "רואה אותו" הכרחי.
מציאת רק תו / מחרוזת לא כל כך פשוטכיבוש, וככל שיותר בסמל המידע, כן ייטב. לא תמיד צריך למצוא תריסר מחירי המזון הטובים ביותר, לבחור מתכונים טעימים לעוגה החג או להחליט על קבלן על תקרה מושעה.
לעתים קרובות עלינו לבצע אופטימיזציה של אלגוריתמים פשוטיםעם לא פשוט מידע אריתמטי או בתנאים קשים, כאשר יש לבחור את הסמל הרצוי מתוך מסד הנתונים, ואת השורה שבה הוא צריך להימצא - במאה אתרים. במקרה זה, את המחיר של בחירת סמל שווה זמן הדגימה ממסד הנתונים, ואת המחיר של איפה לחפש הוא זמן החיפוש של מאות ידוע לשמצה של אתרים.
סמל בודד הוא לא ביטוי או כמה משפטים, זה יכול להיות בכל מקום להיות קטן באופן שרירותי. כיצד לקבוע מה בדיוק נמצא הוא מה שאתה מחפש?
פשוט למצוא את הסמל "$" בטקסט - קצת. בדוק שיש דמות לפני זה, גם, לא תמיד מספיק. אם אתה מספק נקודה או דמות לפני הסמל "$", היא ערובה כי המחירים, שבו סמלים כסף הם בחזית, לא יילקח בחשבון. גם המחירים יחמיצו, שבהם המטבע אינו מצוין כלל, אך יש אינדיקציה מפורשת בדף.
באופן כללי, הפתרון של הבעיה בדרך הרגילה מנפח את האלגוריתם ללא הכר ויקח הרבה זמן. בינתיים, באמצעות ביטוי רגיל, מספר PHP לא ימצאו שום בעיות.
$ cContents = preg_match_all ("/ [0-9] + ([\ $] | usd | у \. e \. | уе) {1} / i";
"נראה דואר אלקטרוני - 2usd; <br/>";
"מצא דואר אלקטרוני - 2e, <br/>";
"עבודה בדואר אלקטרוני - уе2; <br/>";
"לבדוק דואר אלקטרוני - $ 13", $ aResult);
. "; implode ("," $ aResult [0]). "<br/>".
התשובה היא: "2, 2usd, 2u.e.", אבל לא תמצא שום דבר בשורה: "לבדוק דואר אלקטרוני - $ 13".
בתנאי בתבנית את נוכחותו של סמל בחזית או מאחור, אתה יכול להגיע במהירות את המטרה ברוב המכריע של המקרים.
$ cContents = preg_match_all ("/ / [0-9] + ([\ $] | usd | y \. e |. | ye) {1}) | (| [$] | | | |. | ye) {1} [0-9] +) / i ";
"נראה דואר אלקטרוני - 2usd; <br/>";
"מצא דואר אלקטרוני - 2e, <br/>";
"עבודה בדואר אלקטרוני - уе2; <br/>";
"לבדוק דואר אלקטרוני - $ 13", $ aResult);
. "; implode ("," $ aResult [0]). "<br/>".
התוצאה: "4, 2usd, 2u.e., ye2, $ 13".
ביטויים רגולריים מציעה PHP, כמו האחריםכלים, אבל זה בכלל לא הכרחי להשתמש בהם על פי הכללים שלה או להשתמש בפונקציות inline אחרים בתנאי בדרך התחביר.
אתה יכול להפוך את מה שאתה מחפש לפני שתתחיל את החיפוש.מערך, ואת המקום שבו החיפוש יתבצע, מחולק רכיבים לפי הקריטריון המקדים. זוג פשוט להתפוצץ () ו implode () פונקציות לעתים קרובות מפשט ומאיץ את הפתרון.
לדוגמה, כתוצאה של עבודה ראשוניתנוצר מערך של מחרוזות (נתונים) במחוז על כמה תפוחי אדמה שנאסף בכל כפר: ImyaDerevnya הידוע ונפח שנאספו, ואם המדינה מפעילה מספר חברות מערך של מחרוזות הוא ImyaDerevnya.ImyaPredpriyatie וערך דרך ";" וכן הלאה כל המפעלים. לחשב את הסכום הכולל שנאסף במקרה זה לא יהיה אפשרי, אבל אם אתה עושה impode ( ";", $ aResult), יהיה קו אחד ארוך, שבו הזוג - ImyaDerevnya / ImyaDerevnya.ImyaPredpriyatie - אוסף של גודל - יועבר באמצעות ";". האם הפוך על וכתוצאה, להתפוצץ ( ";", $ aResult) - מערך של הכל, מי שנאסף וכיצד נאסף, ולאחר מכן על ידי הסרת שורות מכל תווים שאינם מספריים, יש לנו מספרים בלבד, סכום המהווה את הנפח הכולל שנאסף.
בדוגמה זו, ביטויים רגולריים ב- PHPהם לא צריכים לחפש שום דבר מיותר, הם פשוט וקל לחלץ את הערכים המספריים הדרושים. במהירות וביעילות, לא משנה כמה זמן את שמות הכפרים והעסקים הם. החלטה זו אינה אידיאלית, אבל זה מראה כי לא תמיד יש צורך לפעול לפי הכללים. לעתים קרובות ניתן להשיג את הרצוי באופן יוצא דופן.
התחביר של האלגוריתם לא אומר איך זהנראה ממש. אבל, מתן קידוד זהה של הדף, סקריפט שורות (אשר חיפש ו שבו החיפוש מתבצע), אתה יכול לטבול את עצמך מחוץ למשימה טכנית שלה.
זה הכרחי לא רק כדי לדעת מה לחפש, אבל גם איפה זהמתי, באיזו כמות, מה לשנות וכיצד. באופן רשמי, ביטויים רגולריים של PHP מבוצעים כמנגנון שלם, מלא ומלא תפקוד מלא, אך מסיבות רבות יישום יישומיו בשפות שונות שונה. ככלל, לפני שתוכל להעביר תבנית לסביבת כלים זו או אחרת למשימה מסוימת, עליך לבצע התאמה איכותית, לבצע בדיקה על כל הגרסאות האפשריות של הנתונים המקוריים.
גם אם אתה משתמש הניסיון שלךפיתוח מבוסס PHP, ביטויים רגולריים, דוגמאות, תבניות ומבנים מחייבים אימות קרוב. השפה הפונקציונלית, התחביר שלה וסביבת הביצוע משתנים באופן דינמי.
מה שנכתב בעבר בצורה של שילובפונקציות חיפוש, מפעילי תנאי, להחליף פעולות, הוספה, מחיקה, היא מחרוזת אחת של תווים על פי כללים מסוימים - דפוס ביטוי רגיל. למעשה, נפח משמעותי הוא מקודד בצורה מוגדרת לחלוטין ומתבצע על פי כללים ספציפיים.
בדיוק כפי שאתה לא יכול לאתר באגיםמפעיל את השפה, כך שאתה לא יכול באגים דפוס ביטוי רגיל, תהליך זה יכול להיות רק לחיקוי. ככלל, האופציה מתקבלת: זה עובד - זה לא עובד. התחביר הוא פשוט מאוד, אם כי התפיסה שלו, במיוחד בתחילת העבודה, היא קשה מאוד.
בגרסה פשוטה, התבנית תואמת את השורה:
$ cContents = preg_match ("/ asdf / i", "asdf", $ aResult). "; implode (",", $ aResult).
התוצאה היא "1, asdf", מאז הפונקציהמסיים את עבודתו על המשחק הראשון נתקל דפוס. התוצאה תהיה זהה אם אתה מסתכל בשורה "aaaasdf" ובקו "zzzasdfvvv". אם תציין את התו הראשון ו / או האחרון, התוצאה תהיה חד-משמעית:
$ cContents = preg_match ("asdf / i", "asdf", $ aResult). "; implode (",", $ aResult). "<br/>";
$ cContents = = preg_match ("asdf $ /", "asdf", $ aResult). "; implode (",", $ aResult). "<br/>".
התוצאה תהיה: 1; asdf1; asdf.
הסמלים "^" ו- "$" מציינים היכן להתחילתבנית ואיך זה מסתיים. התוצאה של הפונקציה preg_match היא מספר התאמות, זה יכול להיות 0, 1 או שקר אם מזוהה שגיאה. הפרמטר השלישי הוא מערך - האלמנט היחיד שנמצא נמצא. אם אתה משתמש בפונקציה preg_match_all (), החיפוש ממשיך לסוף השורה.
$ cContents = preg_match ("/ asdf / i", "asdf123asdf456asdf789", $ aResult). "; implode (",", $ aResult). "<br/>";
$ cgents = = preg_match_all ("/ asdf / i", "asdf123asdf456asdf789", $ aResult). "; implode ("," $ aResult [0]). "<br/>".
תוצאה:
1; asdf
3; asdf, asdf, asdf.
אם לא תשתמש בהוראות מיוחדות, לאחר מכןכל תו מגדיר את עצמו ואת מקומו, ללא תלות בקידוד התווים של המחרוזת ובקידוד התבנית. המתכנת מתחייב לדאוג לכך שהקידודים של רכיבים אלו נכונים ביחס זה לזה והקידוד של הדף.
ביטויים רגולריים ב- PHP מייצגיםמחרוזות של תווים שנכתבו בדרך מסוימת. בדרך כלל, על ידי אנלוגיה עם שפות תכנות אחרות, הם כתובים בתווים "/" ... "" / "והוצבו במרכאות, בהתאם לאלגוריתם שבו אתה יכול להשתמש יחיד או כפול.
הפונקציה העיקרית של התאמה php phg הוא קבועהביטוי משתמש בהתאמת דפוס ונעצר כאשר הוא מוצא אותו לראשונה, הגרסה שלו עם הסיומת _all מחפשת את כל ההתאמות ומייצרת מערך של אלה. הפונקציה להחליף מראש להחליף כל התאמה התאמה דפוס, זה יכול לעבוד עם מערכים, המאפשר לך לעצב חיפוש ולבצע תחליף למגוון של אפשרויות.
אפשרויות מעניינות לעבודה עם רגילביטויים ניתן לפתח באמצעות preg_replace_callback הפונקציה, אשר לוקח שום טקסט כדי להחליף, אבל את השם של הפונקציה שתבצע תחליף כזה. בנוסף לערך המעשי, ניתן ליישם מנגנוני אימות תבניות, אשר ממלא תפקיד חשוב בפיתוח ובאיתור הבאגים.
בגלל שפות היפרטקסט הםפורמליזציה, ובמידה רבה יותר הם המקור. מספר רב של תבניות ועיצובים פותחו שיכולים לעבד כמויות גדולות של מידע. חלק ניכר מעבודה זו נעשה על ידי מנגנונים מובנים בתוך מערכות שונות לניהול תוכן (CMS).
לא מפתיע, CMS רבים הפכו לסטנדרטיםדה פקטו עבור אתרי בנייה, וכן, להיות מלווה (מעודכן) חברות הפיתוח, הם לא צריכים לבצע את הפיתוח של תבניות משלהם. עם זאת, מחוץ למערכות כאלה, בעל ניסיון עם ביטויים רגולריים הוא מאוד שימושי.
תחום חשוב של יישום ביטויים רגולרייםPHP נוצר על ידי הופעת ספריות PHPOffice. עבודה עם מסמכים וגיליונות אלקטרוניים היתה תמיד חשובה, ורמת OOXML איפשרה לא רק לפרק את המסמכים האמיתיים, אלא גם ליצור אותם באופן פרוגרמטי.
תודה על הפיתוח של היפרטקסט ו PHP בבפרט, יש הזדמנות אמיתית כדי להפוך את "הפקה" של מסמכים של "טופס סטנדרטי", למשל, חשבונות לתשלום, דוחות, תוכניות עסקיות אובייקטים נוספים מידע אשר המבנה והתוכן הם באמת מקובל פורמליזציה ואוטומציה.
בקשר ליישום לתאר את השפה OOXMLאת תהליך פיתוח ביטויים רגולריים יש הבדלים משמעותיים מן העבודה המסורתית עם שפות סימון HTML ו- CSS מלכתחילה. במסמך אמיתי, מלבד סימון ובנוסף לתוכן עצמו, יש פרטים רבים. לדוגמה, מסמך שנוצר באופן אוטומטי על ידי התוכנית יהיה תוכן קפדני ומדויק. מסמך שנוצר על ידי אדם או מעובד על ידי אותו יהיה תוכן כתוב על קבוצה של תגים. כל עבודה עם המסמך מוביל את העובדה כי סמנטיקה של זה יכול להישאר אחד, אבל צבוע בתוך מספר שונה של עיצובים שונים.
אדם תמיד מעוניין לפתור בעיה,הפקת מידע, וכתוצאה מכך יינתן מידע גם. לאחר הצגת ההצהרה על הבעיה בצורה של מסמך, אדם מקבל סמנטיקה מסוימת, אשר במהלך המפרט על ידי מומחים (ביצוע שינויים, הבהרת הניסוח, מחיקה, עריכה) מוביל לא רק למגוון של גרסאות של מסמך אחד, אלא גם לגרסאות עם תוכן שונה.
בפרט, המשימה שנקבעה על ידי הביטוי "פתור"עריכה רבועה ", לאחר עריכה זה לא ייראה כך:" פתרו את המשוואה הריבועית ". אם השגיאה הראשונה תוקנה תחילה ולאחר מכן השנייה, אזי המידע הטבעי בסגנון OOXML יכול להיראות כך:" [פתור] [] [square] [e] [] [הידראי] [ל] tion] ", אבל זה בכלל לא ערובה כי זה איך המשימה תיראה תגי OOXML (סוגריים מרובעים לחקות את סוגריים של התגים).
לאסוף את המידע יחד בקלות לאחרכל תהליך של עריכת משימות, אבל בכל פעם שהפרוצדורה הזו תתבצע על ידי אלגוריתם אחר. ביטויים רגולריים, כמעין כלי להכשרת משימות מידע, הפכו למעשה לנתיב של מבני היפר-טקסט פורמליים למידע טבעי.
</ p>