מציאת סוגריים בתוך מערך
-
השאלה יותר בשביל לקבל עצה עם יש דרך טובה.
יש לי מערך של אובייקטים שמקורו מניתוח משפט SQL
לכל אובייקט יש את ערך הexpr
שמכיל את הטקסט
אני צריך למצוא קבוצות סוגריים בתוך ערכי הwhereהשאילתה הגולמית היא (לדוגמא):
WHERE a > b AND (a = 100 OR b < 3 OR (z > 10 AND y < 5))
כשאני מגיע בלולאה שלי ל
expr
כזה שמתחיל בסוגריים (פותח) אני צריך למצוא את האינדקס של ההוא שסוגר אותו (שהמשפט בexpr
מסתיים עם סוגר).בשים לב על שיש סוגרים מקוננים.
-
@ש-ב-ח אתה מכין שני מערכים, מערך א' אחד לשמור פתיחות סוגריים, ומערך ב' שמכיל צמדי פותח/סוגר.
אתה צריך לעבור בלולאה על כל תו.
על כל סימן סוגר פותח, אתה מוסיף למערך א' את האינדקס הנוכחי, ועל כל סימן סוגר מסיים אתה מסיר את הערך האחרון במערך א' ומעביר אותו יחד עם האינדקס הנוכחי למערך ב'. -
אני מאמין שמדובר בPHP, אני מספק לך את האלגוריתם מומחש בJS:
function detectParantessPosition(input){ const tuples = []; const lastOpened = []; for (let position = 0; position < input.length; position++) { let current = input[position]; if(current == '(') lastOpened.push(position); else if (current == ')') tuples.push([lastOpened.pop(), position]); } return tuples; } const text = "WHERE a > b AND (a = 100 OR b < 3 OR (z > 10 AND y < 5))"; const positions = detectParantessPosition(text); console.log(positions.map(x => text.substring(x[0]+1, x[1]-1)));