Lua - Get index of last character appearance in a string












1















I have some strings representing table "paths" that can be used to iterate to a value within a table, such as:



"table.subTable[2].anotherTable"



"table.subTable.otherTable.anotherTable"



"table.subTable.otherTable[3]"



[2] and [3] are indexes which might point to another table. I need to write a function that cuts off the last key/index so that the "string path" points to the previous (or "parent") table.



For example, the above strings should turn into:



"table.subTable[2]"



"table.subTable.otherTable"



"table.subTable.otherTable"



I thought this could be done by finding the last [ or . characters in the string and splitting it by using string.sub.



There might be many other ways to achieve this, such as gmatch, but I'm not sure how. Thank you in advance!










share|improve this question



























    1















    I have some strings representing table "paths" that can be used to iterate to a value within a table, such as:



    "table.subTable[2].anotherTable"



    "table.subTable.otherTable.anotherTable"



    "table.subTable.otherTable[3]"



    [2] and [3] are indexes which might point to another table. I need to write a function that cuts off the last key/index so that the "string path" points to the previous (or "parent") table.



    For example, the above strings should turn into:



    "table.subTable[2]"



    "table.subTable.otherTable"



    "table.subTable.otherTable"



    I thought this could be done by finding the last [ or . characters in the string and splitting it by using string.sub.



    There might be many other ways to achieve this, such as gmatch, but I'm not sure how. Thank you in advance!










    share|improve this question

























      1












      1








      1








      I have some strings representing table "paths" that can be used to iterate to a value within a table, such as:



      "table.subTable[2].anotherTable"



      "table.subTable.otherTable.anotherTable"



      "table.subTable.otherTable[3]"



      [2] and [3] are indexes which might point to another table. I need to write a function that cuts off the last key/index so that the "string path" points to the previous (or "parent") table.



      For example, the above strings should turn into:



      "table.subTable[2]"



      "table.subTable.otherTable"



      "table.subTable.otherTable"



      I thought this could be done by finding the last [ or . characters in the string and splitting it by using string.sub.



      There might be many other ways to achieve this, such as gmatch, but I'm not sure how. Thank you in advance!










      share|improve this question














      I have some strings representing table "paths" that can be used to iterate to a value within a table, such as:



      "table.subTable[2].anotherTable"



      "table.subTable.otherTable.anotherTable"



      "table.subTable.otherTable[3]"



      [2] and [3] are indexes which might point to another table. I need to write a function that cuts off the last key/index so that the "string path" points to the previous (or "parent") table.



      For example, the above strings should turn into:



      "table.subTable[2]"



      "table.subTable.otherTable"



      "table.subTable.otherTable"



      I thought this could be done by finding the last [ or . characters in the string and splitting it by using string.sub.



      There might be many other ways to achieve this, such as gmatch, but I'm not sure how. Thank you in advance!







      string lua substring






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 1 at 22:33









      MayronMayron

      63411126




      63411126
























          1 Answer
          1






          active

          oldest

          votes


















          1














          If . and [ only occur in indexing syntax in the strings you are working with, you can do path:match('(.+)[.'). [. is visually confusing, but it is a set containing . and [. You can escape [ with a percent ([.%), but it isn't necessary.



          If one of the table indices is a string that contains . or [, like table['sub.table'][3], this solution will fail. In that case, the solution would be more complicated. You could use LPeg, or replace . or [ within strings with some other sequence of characters before doing the string matching and then restore the . or [ after the string matching.






          share|improve this answer


























          • thanks! The table indices will not contain . or [ so that will work. Not exactly sure why [[.] is fine but switching the characters around requires a % like [.^.

            – Mayron
            Jan 1 at 23:17






          • 1





            Oh, right, the [ doesn't have to be escaped (though the pattern is visually confusing). I've edited my post.

            – cyclaminist
            Jan 2 at 0:00











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53999458%2flua-get-index-of-last-character-appearance-in-a-string%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          If . and [ only occur in indexing syntax in the strings you are working with, you can do path:match('(.+)[.'). [. is visually confusing, but it is a set containing . and [. You can escape [ with a percent ([.%), but it isn't necessary.



          If one of the table indices is a string that contains . or [, like table['sub.table'][3], this solution will fail. In that case, the solution would be more complicated. You could use LPeg, or replace . or [ within strings with some other sequence of characters before doing the string matching and then restore the . or [ after the string matching.






          share|improve this answer


























          • thanks! The table indices will not contain . or [ so that will work. Not exactly sure why [[.] is fine but switching the characters around requires a % like [.^.

            – Mayron
            Jan 1 at 23:17






          • 1





            Oh, right, the [ doesn't have to be escaped (though the pattern is visually confusing). I've edited my post.

            – cyclaminist
            Jan 2 at 0:00
















          1














          If . and [ only occur in indexing syntax in the strings you are working with, you can do path:match('(.+)[.'). [. is visually confusing, but it is a set containing . and [. You can escape [ with a percent ([.%), but it isn't necessary.



          If one of the table indices is a string that contains . or [, like table['sub.table'][3], this solution will fail. In that case, the solution would be more complicated. You could use LPeg, or replace . or [ within strings with some other sequence of characters before doing the string matching and then restore the . or [ after the string matching.






          share|improve this answer


























          • thanks! The table indices will not contain . or [ so that will work. Not exactly sure why [[.] is fine but switching the characters around requires a % like [.^.

            – Mayron
            Jan 1 at 23:17






          • 1





            Oh, right, the [ doesn't have to be escaped (though the pattern is visually confusing). I've edited my post.

            – cyclaminist
            Jan 2 at 0:00














          1












          1








          1







          If . and [ only occur in indexing syntax in the strings you are working with, you can do path:match('(.+)[.'). [. is visually confusing, but it is a set containing . and [. You can escape [ with a percent ([.%), but it isn't necessary.



          If one of the table indices is a string that contains . or [, like table['sub.table'][3], this solution will fail. In that case, the solution would be more complicated. You could use LPeg, or replace . or [ within strings with some other sequence of characters before doing the string matching and then restore the . or [ after the string matching.






          share|improve this answer















          If . and [ only occur in indexing syntax in the strings you are working with, you can do path:match('(.+)[.'). [. is visually confusing, but it is a set containing . and [. You can escape [ with a percent ([.%), but it isn't necessary.



          If one of the table indices is a string that contains . or [, like table['sub.table'][3], this solution will fail. In that case, the solution would be more complicated. You could use LPeg, or replace . or [ within strings with some other sequence of characters before doing the string matching and then restore the . or [ after the string matching.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 1 at 23:59

























          answered Jan 1 at 23:03









          cyclaministcyclaminist

          9701211




          9701211













          • thanks! The table indices will not contain . or [ so that will work. Not exactly sure why [[.] is fine but switching the characters around requires a % like [.^.

            – Mayron
            Jan 1 at 23:17






          • 1





            Oh, right, the [ doesn't have to be escaped (though the pattern is visually confusing). I've edited my post.

            – cyclaminist
            Jan 2 at 0:00



















          • thanks! The table indices will not contain . or [ so that will work. Not exactly sure why [[.] is fine but switching the characters around requires a % like [.^.

            – Mayron
            Jan 1 at 23:17






          • 1





            Oh, right, the [ doesn't have to be escaped (though the pattern is visually confusing). I've edited my post.

            – cyclaminist
            Jan 2 at 0:00

















          thanks! The table indices will not contain . or [ so that will work. Not exactly sure why [[.] is fine but switching the characters around requires a % like [.^.

          – Mayron
          Jan 1 at 23:17





          thanks! The table indices will not contain . or [ so that will work. Not exactly sure why [[.] is fine but switching the characters around requires a % like [.^.

          – Mayron
          Jan 1 at 23:17




          1




          1





          Oh, right, the [ doesn't have to be escaped (though the pattern is visually confusing). I've edited my post.

          – cyclaminist
          Jan 2 at 0:00





          Oh, right, the [ doesn't have to be escaped (though the pattern is visually confusing). I've edited my post.

          – cyclaminist
          Jan 2 at 0:00




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53999458%2flua-get-index-of-last-character-appearance-in-a-string%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          MongoDB - Not Authorized To Execute Command

          How to fix TextFormField cause rebuild widget in Flutter

          Npm cannot find a required file even through it is in the searched directory