【问题标题】:Validating and matching a specifically formatted string验证和匹配特定格式的字符串
【发布时间】:2011-10-02 01:53:14
【问题描述】:

我有以下可以正常工作的正则表达式模式:

#^(.+?)=(.+?)$#D

但是我想对其进行扩展,使其支持以下示例输入:

一些文字=一些更多的文字;一些东西

一些文字=更多文字;某事;某事

一些文字=一些更多的文字;某事;某事;某事

从上面的示例输入中可以看出,分号 (;) 字符被用作分隔符,用于分隔文本(它位于文本之间)。

我想我可以在下面使用以下正则表达式模式 - 它仅在有一个时才有效,但如果有更多由分号分隔的文本则不会...我知道我可能可以添加类似 @ 987654323@ 但我希望验证是严格的,以确保它是那种格式(所以分号不能只在文本之间的任何地方)。

#^(.+?)=(.+?);(.+?)$#D

如果有帮助,我目前正在使用 PHP 的 preg_match() 函数(因此可以在 array() 表单中使用匹配项)。

我不限于使用正则表达式,因为这是我能想到的唯一方法,因此我欢迎使用其他方法或任何可以与此一起使用的方法(前提是结果可以很容易地作为数组获得哈哈)。

另外我想指出,在写这篇文章时(并浏览标记系统)我有一个新闻快讯......也许使用 preg_match_all()PCRE 递归功能可能是一个可能的解决方案?

感谢所有回复并感谢您提供的所有帮助。

【问题讨论】:

    标签: php regex preg-match pcre preg-match-all


    【解决方案1】:

    为什么不在后半部分使用explode() 来爆炸任何分号?

    【讨论】:

    • 嗯,没想到,但这样能保证格式正确吗?
    • 感谢我使用了 explode() 和 array_map('trim', $arr) 和 array_filter() 的组合来清除无效条目。
    【解决方案2】:

    你可以试试这个正则表达式:

    #^(.+?)=((.+?)(;)?)+$#D
    

    【讨论】:

    • Unfourtanetly 无法正常工作,生成的匹配不是预期的。
    【解决方案3】:

    试试:

    #^(.+?)=(.+?)(;(.+?))+?$#D

    【讨论】:

      【解决方案4】:

      我会尝试:

      #^(.+?)=(.+?)(?:;(.+?))+?$#D
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        相关资源
        最近更新 更多