PHP Regex для проверки пробела или определенных символов после строки - PullRequest
2 голосов
/ 08 октября 2011

Мне нужно регулярное выражение, которое может в основном проверять пробел, разрыв строки и т. Д. После строки.

Итак, условия:

  1. Разрешить специальные символы ., _, -, + внутри строки, т.е. @hello.world, @hello_world, @helloworld и т. Д.
  2. Отбрасывать все, включая специальные символы, где после них нет буквенно-цифровой строки, т.е. @helloworld.<space>, @helloworld-<space>, @helloworld.? и т. Д. Должны быть проанализированы как @helloworld

Мой существующий RegEx - /@([A-Za-z0-9+_.-]+)/, который отлично работает Условие # 1 , но все еще существует проблема Условие # 2

Я использую выше RegEx в preg_replace()

Решение

$str = preg_replace('#@[\w+.\-]+\b#', '[[$0]]', $str);

Это отлично работает.

Протестировано с

http://gskinner.com/RegExr/

Ответы [ 3 ]

1 голос
/ 08 октября 2011

Вы можете использовать границы слова , чтобы легко найти положение между буквенно-цифровой буквой и не буквенно-цифровой буквой:

$str = preg_replace('#@[\w+.\-]+\b#', '[[$0]]', $str);

Рабочий пример: http://ideone.com/0ShCm

1 голос
/ 08 октября 2011

Вот идея:

  1. Используйте strrev для обращения строки
  2. Используйте strcspn, чтобы найти самое длинноепрефикс перевернутой строки, не содержащий буквенно-цифровых символов
  3. Вырежьте префикс с помощью substr
  4. Снова переверните строку;это ваш окончательный результат

увидеть его в действии .

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

0 голосов
/ 08 октября 2011

Причина в том, что он читает строку в целом. Если вы хотите, чтобы он разбирал все после буквенно-цифрового раздела, вам, возможно, придется выполнить команду like и закончить (explode ()); и выполните это до конца, чтобы убедиться, что он недействителен, а если он недействителен, то удалите его из уравнения, но тогда вам придется проверять конец для каждой возможной точки разнесения, т. е., -, ~ и т. д. .

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

Извините, что это не сильно помогает, но я подумал, что мысли вслух помогают.

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