preg_match для получения значения

Этот вопрос действительно является дубликатом: Javafx PropertyValueFactory не заполняет Tableview , но я конкретно рассмотрю ваш конкретный случай, так что это понятно.

Фон

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

PropertyValueType getName()
void setName(PropertyValueType value)
PropertyType nameProperty()

Где «имя» - это строка, указанная в конструкторе PropertyValueFactory.

Почему ваше приложение не работает

У вас есть эти три выражения:

new PropertyValueFactory("DateEntered")
new PropertyValueFactory("cDesc")
new PropertyValueFactory("CreatedBy")

Для свойств вашего образца PropertyValueFactory будет искать эти методы:

"DateEntered" => getDateEntered()
"cDesc" => getCDesc()
"CreatedBy" => getCreatedBy()

И у вас есть эти три геттера на вашем sresult class:

getDateEntered()
getcDesc()
getEnteredBy()

Только свойство getDateEntered() будет собрано PropertyValueFactory, потому что это единственный метод сопоставления, определенный в классе sresult.

Совет

Вам нужно будет принять стандарты Java, если вы хотите, чтобы отражение в PropertyValueFactory работало (альтернатива - не использовать PropertyValueFactory и вместо этого писать ваши собственные клеточные фабрики с нуля).

Принятие Соглашения о присвоении имен Java верблюдов также упрощает чтение Java-кода вашим разработчикам Java.

2
задан Firecat 13 July 2018 в 11:50
поделиться

1 ответ

Вы можете использовать

$search_field_pattern  = "/\bdata\[SearchForm]\[(\w+)]/i";
if(preg_match($search_field_pattern, "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

См. PHP demo

Шаблон соответствует

  • \b - граница слова
  • data\[SearchForm]\[ - буквальная строка data[SearchForm][ (примечание [ экранировано, чтобы соответствовать символам [)
  • (\w+) - группа захвата 1 : один или несколько символов слова
  • ] - символ ].

Третий аргумент preg_match, $m будет содержать результаты , Поскольку необходимая подстрока захватывается в группу 1, значение извлекается с помощью $m[1].

Чтобы получить последнюю подстроку внутри квадратных скобок, вы можете использовать

if(preg_match("~\[(\w+)](?!.*\[\w+])~s", "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

См. this PHP demo .

Чтобы получить второй, используйте

if(preg_match("~\[\w+].*?\[(\w+)]~s", "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

См. еще одну демонстрацию PHP .

1
ответ дан Wiktor Stribiżew 17 August 2018 в 12:59
поделиться
  • 1
  • 2
    @Firecat. Тогда каково правило? Получить все внутри последнего [...]? Ответ соответствует вашему текущему вопросу, пожалуйста, отредактируйте его, если вы имели в виду что-то еще. – Wiktor Stribiżew 13 July 2018 в 12:02
  • 3
    @Firecat Вам нужны только зеленые значения ? – Wiktor Stribiżew 13 July 2018 в 12:19
  • 4
    да, и мне нужен только второй – Firecat 13 July 2018 в 12:57
  • 5
    @Firecat second один в строке или last в строке (см. это демо )? – Wiktor Stribiżew 13 July 2018 в 13:00
Другие вопросы по тегам:

Похожие вопросы: