Regex, чтобы проверить, существует ли точная строка, включая # - PullRequest
5 голосов
/ 13 мая 2010

Новый вопрос Как предложил Асаф в предыдущем вопросе: Регулярно проверяйте, существует ли точная строка

Я ищу способ проверить, существует ли точное совпадение строк в другой строке, используя Regex или любой другой предложенный лучший метод. Я понимаю, что вы указываете регулярному выражению совпадать с пробелом или любым другим несловесным символом в начале или конце строки. Однако я точно не знаю, как его настроить.

Строка поиска: #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: добавлено больше семплов

Редактировать 1 для Serg555 и SilentGhost:
Допустимые символы в строке поиска:
#[_a-zA-Z0-9]
# необязательно.

Требования: Строка поиска может находиться в любой позиции символа в теме. До или после него может быть или не быть пробела. Я не хочу, чтобы он совпадал, если он является частью другой строки; как часть слова.

Ради этого вопроса: я думаю, я бы сделал это, используя этот шаблон: /\b\#t\b/gi
Тем не менее, это не возвращает результаты, как я ожидал.

Я могу найти точные совпадения для обычных строк (строк, где нет #), используя:

/\b{$search_string}\b/gi

Дополнительная информация: это будет использоваться в PHP 5

Ответы [ 2 ]

5 голосов
/ 13 мая 2010

Все, что вам нужно, это:

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

\b соответствует границе слова, которая является границей между символами-словами и несловесными символами. # - это несловарный символ, поэтому ваше регулярное выражение соответствует только таким строкам: abc#t или ab_#t.

Кроме того, обычно # не является специальным символом в регулярном выражении, вам не нужно избегать его.

ETA : Ваши требования довольно неоднозначны: До или после него может быть или не быть символа пробела. Я не хочу, чтобы он совпадал, если он является частью другой строки; как часть слова.

  1. нет пробела до или после? так что будет символ без пробела?
  2. но чем он тогда отделен от других строк? какие символы разрешены?

Я думаю, вам нужно дать исчерпывающую выборку возможных входных строк. Потому что, так как это мое регулярное выражение работает отлично.

0 голосов
/ 13 мая 2010

Попробуйте /(?!\b)#t\b/si

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...