הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 27-06-12, 22:31   # 1
link
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 191

link לא מחובר  

עזרה עם regex

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

PHP קוד:
function foo($bar) {
  echo 
$bar;

אני צריך להוציא את השם של הפונקציה, את הארגיומנטים ואת התוכן. אשמח אם תוכלו לעזור לי בזה.
  Reply With Quote
ישן 28-06-12, 08:13   # 2
Haimz
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Sep 2010
הודעות: 1,221

Haimz לא מחובר  

קוד:
<?php

	$text = 'function  foo ($bar) { 
		echo $bar; 
		explode($arr, "");
	}';
	
	preg_match("/function.+?([a-zA-Z0-9_]+?)[\s]*\((.*?)\)[\s]*\{(.+?)\}/is", $text, $match);
	
	$match = array_map("trim", $match);
	
	$name = $match[1];
	$args = $match[2];
	$func = $match[3];
	
	echo "Name: $name<br />Args: $args<br />Func: $func";

?>
תהנה :] בדקתי זה עובד, אבל אני לא יודע איך זה עובד מול כמה פונקציות
  Reply With Quote
ישן 28-06-12, 13:50   # 3
link
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 191

link לא מחובר  

תודה רבה, אבל יש בעיה אחת. אם בתוך הפונקציה עשו תנאי או לולאה, הסוגריים המסולסלים של הנ"ל שוברים את כל העסק.

יש לזה אולי פתרון?
  Reply With Quote
ישן 28-06-12, 14:33   # 4
בניה
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: נחושה
הודעות: 3,434

בניה לא מחובר  

אתה בעצם רוצה לכתוב PARSER לPHP... מציע לך למצוא פתרון יותר מוצלח.
אם אתה מתעקש, אתה יכול לשכתב ל PHP את הקוד C שבPARSER של PHP.

עריכה:
הייתי סקפטי מידי חחח נראה שמישהו עשה משהו כזה:
https://github.com/nikic/PHP-Parser
  Reply With Quote
ישן 28-06-12, 14:37   # 5
link
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 191

link לא מחובר  

למה? מה הבעיה לפרק את הפונקציות לגורמים? זה לא משהו שהוא תמידי אלא בניייה של פונקציות בסשן הנוכחי
  Reply With Quote
ישן 28-06-12, 15:48   # 6
בניה
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: נחושה
הודעות: 3,434

בניה לא מחובר  

כי אתה מבצע פרסינג לקוד.
פרסינג זה לא להשתעשע עם ביטויים רגולארים, זה לתמוך בכל המאפיינים של הסינטקס של השפה ושל המבנה שלה.
אם לא תממש את הפרסר ב100%, אתה תמיד תגיע למצבי קצה שבהם הקוד שלך לא ידע לטפל.
בטח ובטח to יהיו שגיאות סינטקס של המשתמש.

זה תלוי כמה אתה באמת רוצה להשקיע בזה אתה יכול לחפש קוד מוכן(כמו זה שקישרתי אליו) ולקוות שהמימוש יהיה טוב
  Reply With Quote
ישן 28-06-12, 18:28   # 7
link
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 191

link לא מחובר  

מה שהבאת הוא גדול מדי ומסועף מדי. אני צריך בסך הכול צריך לקחת את כל הפונקציות שהוגדרו בtextarea ולהפעיל אותם בכל פעם שדפים אחרים באתר נטענים. זה עוזר לדיבוג של דברים. הביטוי הרגולרי שסופק עשה את כל העבודה פרט לזה שהוא נכשל ברגע ששמתי איזה תנאי בתוך אחת הפונקציות.
  Reply With Quote
ישן 28-06-12, 21:24   # 8
Haimz
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Sep 2010
הודעות: 1,221

Haimz לא מחובר  

כן זה אפשרי, אבל זה יתמוך רק בפונקצייה אחת,

פשוט לשנות את הקוד ל:
קוד:
<?php

	$text = 'function  foo ($bar) { 
		echo $bar; 
		explode($arr, "");
	}';
	
	preg_match("/function.+?([a-zA-Z0-9_]+?)[\s]*\((.*?)\)[\s]*\{(.+)\}/is", $text, $match);
	
	$match = array_map("trim", $match);
	
	$name = $match[1];
	$args = $match[2];
	$func = $match[3];
	
	echo "Name: $name<br />Args: $args<br />Func: $func";

?>
אני לא בדקתי את זה אבל זה אמור לעבוד ..
  Reply With Quote
ישן 28-06-12, 23:17   # 9
Tomer
Whatever
 
Tomer's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
הודעות: 7,039
שלח הודעה באמצעות MSN אל Tomer Send a message via Skype™ to Tomer

Tomer לא מחובר  

ציטוט:
נכתב במקור על ידי link צפה בהודעה
מה שהבאת הוא גדול מדי ומסועף מדי. אני צריך בסך הכול צריך לקחת את כל הפונקציות שהוגדרו בtextarea ולהפעיל אותם בכל פעם שדפים אחרים באתר נטענים. זה עוזר לדיבוג של דברים. הביטוי הרגולרי שסופק עשה את כל העבודה פרט לזה שהוא נכשל ברגע ששמתי איזה תנאי בתוך אחת הפונקציות.
למה בעצם לא להשתמש ב eval?
__________________
תומר
  Reply With Quote
ישן 29-06-12, 16:48   # 10
link
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 191

link לא מחובר  

ציטוט:
נכתב במקור על ידי Tomer צפה בהודעה
למה בעצם לא להשתמש ב eval?
אני צריך לפרסס אותם בעצמי כי אלו פונקציות שיושבות בתוך סשן וככה אפשר למחוק אותם, לא להכריז עליהם - בקיצור שליטה מלאה עליהן.

אחר כך אני רץ על המשתנה ובונה אותם מחדש עם eval
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 14:31.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ