【问题标题】:Regex with +(plus) and space pattern带有 +(加号)和空格模式的正则表达式
【发布时间】:2011-10-01 06:42:39
【问题描述】:

我有以下句子

"my hooorrrr sssee strongggg"

我的正则表达式是:

"(h+o+r+s+e+) s+t+r+o+n+g+"

只有当句子是:时才有效/匹配:

"my hooorrrrsssee strongggg"

任何机构都可以提供帮助?

无论单词之间的空格如何,我都想匹配。

example : "my h ooo rrr rss    se eee    stttro ngggg"

另一个问题是当某些字符被数字替换时,如下所示:

"my h 0o0 rrr rs555sss    se ee333    stttr0 ngggg"

a replaced by 4
b replaced by 8
s replaced by 5
i replaced by 1
o replaced by 0

任何机构都可以提供帮助?

谢谢

【问题讨论】:

  • horsestrong(马和强之间没有空格)也应该匹配吗?

标签: php regex word


【解决方案1】:

使用*(空格,星号)允许可选空格。

(h[h ]*o[o ]*r[r ]*s[s ]*e[e ]*)s[s ]*t[t ]*r[r ]*o[o ]*n[n ]*g[g ]*

您可能还需要考虑将任何空格与\s(例如,包括制表符)匹配,而不仅仅是空格。

要允许数字或字母使用字符类,例如[0o]

(h[h ]*[o0][o0 ]*r[r ]*[s5][s5 ]*[e3][e3 ]*)[s5][s5 ]*t[t ]*r[r ]*[o0][o0 ]*n[n ]*g[g ]*

【讨论】:

  • 感谢您的回答。 "(h+ *o+ *r+ *s+ *e+) +s+ *t+ *r+ *o+ *n+ *g+" 当句子为 "my ooo rrr rss se eee stttro ngggg" 时有效
  • 但是 (h+ *[o0]+ *r+ *[s5]+ *[e3]+) +[s5]+ *t+ *r+ *[o0]+ *n+ *g+ 无效时句子是“我的 h 0o0 rrr rs555sss se ee333 stttr0 ngggg”
  • 有字母、空格、同一个字母时不匹配,如hooorss sseee
  • Billy 对,它与“my h 0o0 rrr rs555sss se ee333 stttr0 ngggg”不匹配
  • 这个正则表达式有什么不同 "(h[h ]*[o 0 ]*r[r ]*[s 5 ]*[e 3]) [s 5]*t[t]*r[r]*[o 0]*n[n]*g[g]*" ?
【解决方案2】:

如果要匹配空格,则需要将其包含在正则表达式中。 \s 是匹配空白字符(即空格、制表符、换行符)的模式。

r+ 将匹配一个或多个 r 字符,但不会查找空格。

r+\s* 匹配一个或多个 r 字符,后跟零个或多个空白字符。

您可以从那里构建表达式的其余部分。

【讨论】:

    【解决方案3】:

    这匹配每个字母,后跟零个或多个相同的字母或空格

    h[h ]*o[o ]*r[r ]*s[s ]*e[e ]*s[s ]*t[t ]*r[r ]*o[o ]*n[n ]*g[g ]*
    

    使用您指定的数字... (e = 3, o = 0, s = 5)

    h[h ]*[o0][o 0]*r[r ]*[s5][s 5]*e[e 3]*[s5][s 5]*t[t ]*r[r ]*[o0][o 0]*n[n ]*g[g ]*
    

    【讨论】:

    • +1:关闭,但在 '0o0' 上失败,因为数字在前。
    • 现在我认为它匹配所有情况,是的。
    【解决方案4】:

    更新 2

    根据您问题中的信息,您可以使用(更新以捕捉 Tim Pietzcker 指出的案例!):

    [h][h ]*[o0][o 0]*[r][r ]*[s][s 5]*[e3][e 3]*[s5][s 5]*[t][t ]*[r][r ]*[o0][o 0]*[n][n ]*[g][g ]*
    

    我刚刚意识到这使得答案与 Mark Byers 相同!

    【讨论】:

    • 但它允许输入任何数字单词,我只想要一个替换的数字谢谢我在我的问题中列出:)
    • 请注意,您还可以通过简单地将 \d(任何数字 0-9)与字母交换来限制每个字母允许的数字,例如 [e 3]+。
    • 这也匹配12345678901h r e t o g等等。
    • 已修复以匹配特定示例。最初的答案是为了更通用,因此 OP 可以根据需要对其进行更改。很抱歉造成混乱。
    • 它仍然匹配一个完全由空格组成的字符串(以及许多其他无效字符串)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多