【问题标题】:Regex to check if exact string exists including #正则表达式检查是否存在确切的字符串,包括#
【发布时间】:2011-02-19 03:46:07
【问题描述】:

新问题 Asaph 在上一个问题中提出的建议:Regex to check if exact string exists

我正在寻找一种方法来使用正则表达式或建议的任何更好的方法来检查另一个字符串中是否存在精确的字符串匹配。我了解您告诉正则表达式匹配字符串开头或结尾的空格或任何其他非单词字符。但是,我不知道如何设置它。

搜索字符串:#t

应该匹配:
字符串 1:Hello World, Nice to see you! #t
字符串 2:#T Hello World, Nice to see you!
字符串 3:Hello World, #t Nice to see you!

不应匹配:
字符串 1:Hello World, Nice to see you!
字符串 2:Hello World, Nice to see you! #ta
字符串 3:#tHello World, Nice to see you!

编辑 2:添加更多字符串示例

为 Serg555 和 SilentGhost 编辑 1:
搜索字符串中允许的字符:
#[_a-zA-Z0-9]
# 是可选的。

要求: 搜索字符串可以位于主题中的任何字符位置。 在它之前或之后可能有也可能没有空格字符。 如果它是另一个字符串的一部分,我不希望它匹配;比如单词的一部分。

为了这个问题:我想我会使用这种模式:/\b\#t\b/gi
但是,这并没有像我预期的那样返回结果。

我可以使用以下方法找到正常字符串(不存在 # 的字符串)的完全匹配项:

/\b{$search_string}\b/gi

附加信息:这将在 PHP 5 中使用

【问题讨论】:

    标签: php regex


    【解决方案1】:

    你只需要:

    /(?:^|\s)#t\b/i           #t is in the beginning or preceded by space.
    

    \b 匹配单词边界,即单词字符和非单词字符之间的边界。 # 是非单词字符,因此您的正则表达式仅匹配如下字符串:abc#tab_#t

    另外,通常# 不是正则表达式中的特殊字符,您不需要对其进行转义。

    ETA:您的要求相当模糊:在它之前或之后可能有也可能没有空格字符。如果它是另一个字符串的一部分,我不希望它匹配;例如单词的一部分。

    1. 前后没有空格字符?所以会有一个非空白字符?
    2. 但是它是如何与其他字符串分开的呢?允许使用哪些字符?

    我认为您需要提供可能的输入字符串的全面示例。因为,因为它是我的正则表达式工作得很好。

    【讨论】:

    • 如果我只希望它匹配 #t 而不是 abc#t#ta
    • 这个也可以匹配 abc#t,但不应该。
    • @serg:我不认为OP有这样的问题
    • 什么意思?他只是在第一条评论中写的。
    • 这个不匹配 abc,#t :p
    【解决方案2】:

    试试/(?!\b)#t\b/si

    【讨论】:

    • 是的,使用 \b 搜索非单词字符并不是最好的主意。但它仍然会比#t\b 产生更少的错误匹配
    • 这个?不,仅适用于您的&#t
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多