【问题标题】:Regex match character and non-ascii characters正则表达式匹配字符和非 ASCII 字符
【发布时间】:2013-09-22 04:40:21
【问题描述】:

我正在编写一个脚本来逐行清理包含非 ascii 字符的文件,但我遇到了正则表达式模式的问题。我需要一个正则表达式模式,它匹配任何以星号开头的行,可能有一个等号,并且将包含非 ascii 字符和空格。我知道如何匹配非 ascii 字符,但与其他明确定义的字符不同。

这是我需要匹配的示例行:

* = Ìÿð ÿð

这是我目前的模式:

/\*[^[:ascii:]]+[\r\n]/

这将匹配以星号开头并包含非 ascii 字符的行,但如果该行包含空格或等号则不匹配。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    也许这个 - (编辑:重读后更改)

     # ^\*(?=.*[^\0-\177])
    
     ^ 
     \*
     (?= .* [^\0-\177] )
    

    【讨论】:

      【解决方案2】:

      试试下面的表达式:

      ^\*\s*=?\s*[[:^ascii:]\s]+[\r\n]*$
      

      这匹配行首^,然后匹配零个或多个空格\s*,后跟可选等号=?,然后匹配零个或多个空格\s*

      现在,一个不错的表达式匹配一个或多个由非 ascii 和空格组合而成的字符 [[:^ascii:]\s]+,请查看 docs 以查看字符类的语法。

      最后,表达式匹配可能结束行的回车和换行符的组合。

      Regex101 Demo

      【讨论】:

      • @Broxzier 好的,谢谢,虽然我有时发现通过编写模式来解释模式很有帮助。
      • 小心,如果您检查控制路径,您会发现它也只匹配一个星号。
      • @sln 谢谢你的观察。我的最后一次编辑后的表达式只有在至少有一个非 ascii 或空白字符时才匹配。
      猜你喜欢
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多