【问题标题】:Regex - how to match a chain of words until a non "word" character [closed]正则表达式 - 如何匹配一个单词链直到一个非“单词”字符[关闭]
【发布时间】:2013-12-06 00:17:21
【问题描述】:

我有一个类似的字符串:

这是一个测试字符串 - 这是第二个测试字符串;这是第三个测试字符串

我的目标是只匹配第一个字符链:

这是一个测试字符串

分隔符可以是除单词以外的任何内容:(-, ;, _, ? etc....)

如何使用正则表达式做到这一点?

谢谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:
    /([a-z\d\s]+)/i
    

    这匹配字母 (a-z)、数字 (\d) 或空格 (\s) 中的一个或多个。
    修饰符i 使其不区分大小写。

    请注意,在这种情况下,您不能使用 \w 匹配字母,因为它也匹配 OP 问题中明确禁止的下划线。

    【讨论】:

    • 太棒了,非常感谢
    • 请注意,如果输出包含数字,这将不会给出所需的结果:“这是我的第 1 个字符串;这是我的第 2 个字符串,这是我的第 3 个字符串”将返回“这是我的”
    • @JesperBunnyJensen 谢谢,添加了\d
    • @SQB 请阅读this comment
    • @HamZa 已相应更新。我从来没有真正使用过 PHP,但我认为是 PCRE。正如他们所说,假设是一切之母,呃....出错的事情。
    【解决方案2】:

    使用preg_replace

    $string = 'This is a test string - This is a second test string ; This is a third test string';
    $match = preg_replace('/[^\sa-z].*/i', '', $string);
    echo $match; // => This is a test string
    

    【讨论】:

    • 也可以,但比 SQB 的答案要复杂一些。非常感谢
    【解决方案3】:

    考虑以下正则表达式...

    ^[\w\s]*
    

    祝你好运!

    【讨论】:

    • \w不仅匹配字母和数字,还匹配_
    • \w 应该匹配字母数字字符
    • 根据PHP PCRE regex syntax - Escape sequence\w 匹配任何“单词”字符。 ....“单词”字符是任何字母或数字或下划线字符,即可以成为 Perl“单词”一部分的任何字符。
    【解决方案4】:

    检查这个正则表达式,将找到所有带有空格的字符

    /[A-Za-z\s]+/is

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2022-12-17
      • 2016-05-05
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多