Сопоставление шаблона границы Lua (поиск всего слова)

может кто-нибудь помочь мне с этим, пожалуйста:

s_test = "this is a test string this is a test string "

function String.Wholefind(Search_string, Word)
 _, F_result = string.gsub(Search_string, '%f[%a]'..Word..'%f[%A]',"")
 return F_result
end

A_test = String.Wholefind(s_test,"string")
output: A_test = 2

Таким образом, пограничный шаблон без проблем находит слово целиком, а gsub считает все слова без проблем, но что, если в строке поиска есть числа?

s_test = " 123test 123test 123"
B_test = String.Wholefind(s_test,"123test")
output: B_test = 0 

кажется, работает, если числа не находятся в начале или конце строки поиска


person Col_Blimp    schedule 28.08.2012    source источник
comment
Попробуйте %w и %W вместо %a и %A.   -  person lhf    schedule 28.08.2012
comment
лол, вопрос в том, что шаблон '%f[%a]'..Word..'%f[%A]' не работает, если удалить $a $A или добавить число %d поэтому я искал решение, чтобы заставить эту работу работать со смешанными строками   -  person Col_Blimp    schedule 28.08.2012
comment
@lhf, %w работает так же, как %a, просто отлично, но не с числами   -  person Col_Blimp    schedule 28.08.2012


Ответы (1)


Ваш шаблон не совпадает, потому что вы пытаетесь сделать невозможное.

После включения значения переменной шаблон выглядит следующим образом: %f[%a]123test%f[%A]. Что значит:

  1. %f[%a] - найти переход от небуквы к букве
  2. 123 - найти 123 на позиции после перехода с небуквы на букву. Это само по себе является логической невозможностью, поскольку вы не можете сопоставить переход к букве, когда за ней следует небуква.

Ваш шаблон (как написано) не будет работать для любого слова, которое начинается или заканчивается не буквой.

Если вам нужно искать фрагменты, включающие буквы и цифры, то ваш шаблон нужно изменить на что-то вроде '%f[%S]'..Word..'%f[%s]'.

person Paul Kulchenko    schedule 28.08.2012
comment
спасибо, это работает, вы случайно не знаете, как проверить, начинается ли слово или заканчивается числом, поэтому %f[%a]123test%f[%A] и '%f[%S]'..Word. .'%f[%s]' можно поместить в оператор if?? - person Col_Blimp; 28.08.2012
comment
@Mick, тебе нужно проверить как первый, так и последний символы. Попробуйте (Word:find('%d', 1) or Word:find('%d', -1)) and '%f[%S]'..Word..'%f[%s]' or '%f[%a]123test%f[%A]'. - person Paul Kulchenko; 28.08.2012
comment
спасибо Пол, какое значение между [%a] и [%A] и [%S] и [%s] , просто пытаюсь понять это, чтобы я мог сделать здесь надежную функцию, которая будет работать с любым сегментом строки - person Col_Blimp; 29.08.2012
comment
@Mick, %S обнаружит переключение с пробела на пробел (вероятно, это то, что вам нужно, когда ваша работа начинается с цифры или буквы). В качестве альтернативы вы можете попробовать %w и %W, как предложил lhf. - person Paul Kulchenko; 29.08.2012