Класс символов \b
в JavaScript RegEx действительно полезен только при простой кодировке ASCII. \b
- код быстрого доступа для границы между наборами \w
и \W
или \w
и началом или концом строки. Эти наборы символов учитывают только слова ASCII «word», где \w
равно [a-zA-Z0-9_]
, а \W
- отрицание этого класса.
Это делает классы символов RegEx в значительной степени бесполезными для работа с любым реальным языком.
\s
должен работать для того, что вы хотите сделать, при условии, что условия поиска ограничиваются только пробелами.
Я думаю, что вы, вероятно, имели флаг double_quotes в codes
, когда constant_value был скомпилирован. Значение этого флага не повлияет на предложения, уже сохраненные в базе данных.
constant_value1 --> "ID".
:-set_prolog_flag(double_quotes, chars).
constant_value2 --> "ID".
?- listing(constant_value1).
constant_value1([73, 68|A], A).
?- listing(constant_value2).
constant_value2(['I', 'D'|A], A).
Редактировать Guy Coder
Поскольку я использую Q & A в SO как личную записную книжку со своими Q & A, я склонен смотреть на принятый ответ для деталей ; Я добавляю их сюда для всеобщего блага.
Как правильно говорит этот ответ, проблема была вызвана тем фактом, что первоначально в исходном коде, который был модулем, хранящимся в виде файла, перед кодом
было написано
:- set_prolog_flag(double_quotes,chars).
] constant_value --> "ID".
затем в REPL
?- consult('C:/dcg_examples.pl').
?- listing(constant_value).
constant_value(['I', 'D'|A], A).
true.
и использовать этот
?- phrase(constant_value,"ID").
true.
В последнем исходном коде я изменил значение для double_quotes
замечают, что изменение с chars
на codes
Перезапуск REPL и выполнение тех же действий
?- consult('C:/dcg_examples.pl').
?- listing(constant_value).
constant_value([73, 68|A], A).
true.
?- phrase(constant_value,"ID").
true.
дали другой результат для листинга / 1.
Однако в REPL использование
set_prolog_flag(double_quotes,<VALUE>).
не оказало влияния на результат листинга / 1.
< ЗНАЧЕНИЕ > может быть одним из string
, chars
, codes
, traditional
или atom
.
Ключевым моментом, который следует здесь отметить, является то, что в листинге / 1 используется проверенный / скомпилированный / сохраненный код. Таким образом, значение double_quotes
во время консультации / компиляции / хранения - это то, что использует листинг / 1. Любые изменения в double_quotes
после этого в REPL не изменят полученный / скомпилированный / сохраненный код и, следовательно, результат листинга / 1.
Чтобы осуществить изменение, вы должны добавить
:- set_prolog_flag(double_quotes,<VALUE>).
в ваш исходный код перед предикатом, затем консультироваться с / 1 , чтобы загрузить его, а затем перечислить / 1.
Значение «консультируется / компилируется / сохраняется» не означает, что это три отдельных действия, выполняемых в последовательности, здесь они определяют, когда исходный код помещается в базу данных для использования в листинге / 1.